2012-08-08 29 views
8

Şu anda X509TrustManager'ı geçici olarak tüm çözümlere geçici olarak 'çözüm' (güvenli olmayan) olarak izin vermek için geçersiz kılıyorum. Eklemeye nasıl devam edeceğimi anlamaya çalışıyorum, bu yüzden uygun bir düzeltmenin yapılabileceği (ki şu anda ellerim dışında) bir sorunla karşılaşacağım belirli bir sertifikayı kabul ediyorum. İşte geçerli kod.X509TrustManager TÜM sertifikalara izin vermeden geçersiz kılın mı?

TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { 
    @Override 
    public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 

    @Override 
    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { 
    } 

    @Override 
    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { 
    } 
}}; 

try { 
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
} catch (GeneralSecurityException e) { 
    System.out.println(e.getStackTrace()); 
} 
+0

neden boş bir dizi yerine boş değer döndürüyor? spec, null olmayan bir dizi döndürmek için söylüyor. – Jayen

cevap

7

Yapmanız gereken tek şey sertifikayı getAcceptedIssuers'dan döndürmektir. this

InputStream inStream = new FileInputStream("fileName-of-cert"); 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); 
inStream.close(); 

Bkz ardından

+0

Bağlandığım bir URL'den aldığım bir sertifikayı iade edebilir miyim? Şu anda, yalnızca sertifika hatalarını veren başka bir sunucudaki başka bir URL'ye giderken sertifika hatalarını alıyorum. – user1015523

+0

Yaptığım şey, tarayıcıdan sitedeki belgeyi aşağı çekmek için bir tarayıcı kullanmak (hatayı gördüğünüzde, her ana tarayıcıda diske kaydetmek için bir seçenek olmalı ve sonra da anahtarlığa ekleyin) StephenC'nin dediği gibi depolayın veya yukarıdaki kodu dosyadan kullanın. Yukarıdaki çözüm biraz daha az ağrılı olabilir (daha az esnek de olsa), çünkü IIRC üreten anahtarlayıcılar bir parçadan oluşur. – dfb

+1

Eğer openssl varsa, sertifika zinciri komut satırından indirilebilir: openssl s_client -host www.webservicehost.com -port 443 -showcerts> output_certificate.crt – IcedDante

0

Bir olasılık geçici güvenilir bir sertifika olarak JVM anahtar deposuna sorunlu sertifika eklemek olacaktır yöntemi içinde bir dizideki o dönün.

İlgili konular