SORU
17 Mayıs 2009, Pazar


HTTPS/SSL üzerinden Java istemci sertifikası

Java 6 kullanarak uzak bir sunucuda HttpsURLConnection Bir, bir istemci sertifikası oluşturmak için çalışıyorum.
Sunucu selfsigned kök sertifikası kullanıyor ve parola korumalı bir istemci sertifikası verilmelidir. Sunucu kök sertifikası ve anahtar deposu /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/security/cacerts buldum varsayılan java () 10.5) için istemci sertifikası ekledim. Anahtar deposu dosya adı istemci sertifikası oraya gitmek zorunda olmadığını önermek gibi görünüyor?

Her neyse, bu Mağaza için kök sertifika rezil javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed' problem. çözüldü sözlerine ekledi

Ancak, şimdi istemci sertifikası nasıl kullanılacağını çözemedim. İki yaklaşım denedim ve hiçbir yerde beni alır.
İlk ve tercih edilen, deneyin:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
URL url = new URL("https://somehost.dk:3049");
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslsocketfactory);
InputStream inputstream = conn.getInputStream();
// The last line fails, and gives:
// javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

HttpsURLConnection sınıfı (HTTP sunucu ile konuşmak istiyorum beri ideal) atlama denedim, ve bu yerine:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("somehost.dk", 3049);
InputStream inputstream = sslsocket.getInputStream();
// do anything with the inputstream results in:
// java.net.SocketTimeoutException: Read timed out

Hatta istemci sertifikası buradaki sorun olduğundan emin değilim.

CEVAP
18 Mayıs 2009, PAZARTESİ


Tavsiye değil, aynı zamanda SSL sertifika doğrulama hepinize: devre dışı bırakabilirsiniz

import javax.net.ssl.*;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

public class SSLTool {

  public static void disableCertificateValidation() {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] { 
      new X509TrustManager() {
        public X509Certificate[] getAcceptedIssuers() { 
          return new X509Certificate[0]; 
        }
        public void checkClientTrusted(X509Certificate[] certs, String authType) {}
        public void checkServerTrusted(X509Certificate[] certs, String authType) {}
    }};

    // Ignore differences between given hostname and certificate hostname
    HostnameVerifier hv = new HostnameVerifier() {
      public boolean verify(String hostname, SSLSession session) { return true; }
    };

    // Install the all-trusting trust manager
    try {
      SSLContext sc = SSLContext.getInstance("SSL");
      sc.init(null, trustAllCerts, new SecureRandom());
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
      HttpsURLConnection.setDefaultHostnameVerifier(hv);
    } catch (Exception e) {}
  }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8bitdigitaltv

    8bitdigitalt

    31 AĞUSTOS 2011
  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010