2011-07-13 17 views
6

Kendinden imzalı bir HTTPS sunucusuna bağlanan bazı örnek Java projeleri oluşturmaya çalışıyorum. Sertifikayı doğrulamaya çalışmak için Java'yı kullanamıyorum. Bu sertifikaya güvenmek istemiyorum, sadece tüm sertifika geçerliliğini göz ardı etmek istiyorum; Bu sunucu ağımın içinde ve sertifikanın geçerli olup olmadığı konusunda endişe duymadan bazı test uygulamalarını çalıştırmak istiyorum.Java sertifika doğrulamasını dikkate almıyor

java -Dcom.sun.net.ssl.checkRevocation=false HelloWorld 
org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

-Dcom.sun.net.ssl.checkRevocation = yardım etmedi yanlış.

public static void DisableCertificateValidation() { 
    TrustManager[] trustAllCerts = new TrustManager[]{ 
    new X509TrustManager() { 
     public X509Certificate[] getAcceptedIssuers() { return null; } 
     public void checkClientTrusted(X509Certificate[] certs, String authType) { } 
     public void checkServerTrusted(X509Certificate[] certs, String authType) { } 
    } 
    }; 
    try { 
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
    } catch (Exception e) { 
    } 
} 

Ama yine aynı sorun var: Ben de şu kod ekleyerek çalıştı. Burada neler oluyor? Eğer Eksen 2 kullanıyorsanız ve Eksen 2, HTTP (S) bağlantıları yapmak için HttpsURLConnection kullanmaz, ancak Apache HttpClient (aynı bildiğim kadarıyla 3.x), bu yüzden HttpsURLConnection.setDefaultSSLSocketFactory(...) sahip olacağı

+0

Sertifikaları axis2 ile yok saymayı başardınız mı? Josip – cromorrissey

cevap

10

org.apache.axis2.AxisFault hayır gösterir orada etkisi.

Sen, daha spesifik olarak, Eksen 2 için bu belgeyi bir SSLContext kurmayla ilgili this answer bir göz olabilir

: http://axis.apache.org/axis2/java/core/docs/http-transport.html#httpsupport

(Alternatif olarak, SSLContext.setDefault(...) ile varsayılan SSLContext ayar ile kurtulmak mümkün olabilir tanıtıldı Java'da 6. Varsayılan SSL içeriğiniz için sertifika doğrulamasını devre dışı bırakmak, gerçek bir uygulamada açık bir şekilde iyi bir fikir değildir.)

+0

Ahh, bu yüzden Axis2 HttpsUrlConnection kullanmıyor, bu çok şey açıklıyor! Erm ... SSLContext'i nasıl kuracağımı hala bilmiyorum, bir çeşit zorlu dokümantasyon, sorunum var, çünkü bir şekilde basit bir yer değiştirmesi gerektiğini düşünüyorum. –

+0

Gerçekten de, SSLContext.getInstance ("TLS") '(veya' SSLContext.getInstance ("SSL") '?) Değeriyle' SSLContext.setDefault (sc) 'ekleyerek burada çalışır. – sehe

3

Bu daha eski bir sorudur, ancak üzerine bastım ve doğru yönde beni perişan ettim. Ben params ayarlayarak geçerli bir istemci sertifikası bulunmayan axis2 içinde bir https url erişebilir:

import org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory; 
import org.apache.commons.httpclient.protocol.Protocol; 

EasySSLProtocolSocketFactory easySSLProtocolSocketFactory; 
try { 
    easySSLProtocolSocketFactory = new EasySSLProtocolSocketFactory(); 
    Protocol.unregisterProtocol("https"); 
    Protocol.registerProtocol("https", new Protocol("https", 
        (ProtocolSocketFactory) easySSLProtocolSocketFactory, 443)); 
} 
catch (GeneralSecurityException e) { 
     e.printStackTrace(); 
} 

Sadece axis2 servis istemcisi çağırmadan önce bunu emin olun. Bu, üretimde yapacağım bir şey değil, ama benim için hile yapan güvensiz bir sunucu için hızlı bir saldırı.

İlgili konular