SORU
23 Mayıs 2010, Pazar


kabul etmek için söylüyorum java kendinden imzalı ssl sertifikası

Standart bir soru gibi görünüyor, ama açık talimatlar hiçbir yerde bulamadım.

Java kod muhtemelen kendinden imzalı (veya süresi) sertifika sunucusu ile iletişim kurmaya çalışıyorum. Böyle bir şey verir

[HttpMethodDirector] I/O exception (javax.net.ssl.SSLHandshakeException) caught when processing request: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Anladığım kadarıyla, etrafında keytool ile oynamak ve Tamam bu bağlantıya izin vermek için java söylemeliyim. Ama bulduğum tüm yorumlar keytool ile tam olarak yeterli olduğumu kabul, gibi "sunucu için özel anahtar ve anahtar deposu içine alma". Ve ben değilim. Ayrıntılı talimatları post edebilecek biri var mı?
Unıx koşuyorum, bash script iyi olurdu.

Önemli değil, ama kod jboss yürütülen pek emin değilim.

Çok teşekkürler!

CEVAP
23 Mayıs 2010, Pazar


Temelde burada iki seçenek var: JVM için sertifika veya müşteri truststore yapılandırmak kendi kendine imzalanan ekleyin

Seçenek 1

Tarayıcınızdan sertifika vermek ve almak içinde JVM sizin truststore (güven zinciri kurmak için):

<JAVA_HOME>\bin\keytool -import -v -trustcacerts
-alias server-alias -file server.cer
-keystore cacerts.jks -keypass changeit
-storepass changeit 

Seçenek 2

Sertifika Doğrulama (Example Depot kod) devre dışı bırakın:

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

// Install the all-trusting trust manager
try {
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (GeneralSecurityException e) {
} 
// Now you can access an https URL without having the certificate in the truststore
try { 
    URL url = new URL("https://hostname/index.html"); 
} catch (MalformedURLException e) {
} 

UnutmayınSeçeneği #2 hiç tavsiye etmem. Güven yöneticisi devre dışı bırakma SSL bazı bölümleri yenilgiler ve savunmasız orta saldırıları adam yapar. Seçenek #1 veya daha iyisi, sunucu bir "iyi bilinen bir CA tarafından imzalanmış" sertifika gerçek olması tercih

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • OVERWERK

    OVERWERK

    6 Temmuz 2010
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008