Düzenleme: - Soruyu biçimlendirmeye çalıştım ve cevabı benimkinden daha prezentabl bir şekilde kabul etti Blog
İşte asıl sorun.
Bu hatayı alıyorum:
ayrıntılı ileti sun.security.validator.ValidatorException: PKIX yolu oluşturma başarısız oldu:
sun.security.provider.certpath.SunCertPathBuilderException: istenen hedefe yönelik geçerli sertifika yolu bulunamıyorneden javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX yolu oluşturma başarısız oldu: sun.security.provider.certpath.SunCertPathBuilderException: istenen hedefe geçerli sertifika yolu bulunamadı
Tomcat 6'yı web sunucusu olarak kullanıyorum. Farklı Tomcats'lara farklı bağlantı noktalarında ancak aynı makinede yüklü iki HTTPS web uygulamam var. Söyle App1(port 8443)
ve
App2(port 443)
. App1
bağlanır App2
. Ne zaman App1
bağlanır App2
yukarıdaki hatayı alıyorum. Bunun çok yaygın bir hata olduğunu biliyorum, bu yüzden farklı forumlarda ve sitelerde birçok çözümle karşılaştım. Her server.xml
iki Tomcat'ta da aşağıdaki girişe sahibim :
keystoreFile="c:/.keystore"
keystorePass="changeit"
Her site, app2 tarafından verilen sertifikanın güvenilir uygulama1 jvm deposunda olmamasının aynı nedenini söylüyor. IE tarayıcısında aynı URL'yi vurmaya çalıştığımda da bu doğru görünüyor (ısınma ile bu web sitesinin güvenlik sertifikasında bir sorun var. Burada bu web sitesine devam diyorum). Ancak aynı URL Java istemcisi tarafından vurulduğunda (benim durumumda) yukarıdaki hatayı alıyorum. Güven mağazasına koymak için şu üç seçeneği denedim:
Seçenek 1
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Seçenek2 Ortam değişkeninde aşağıdaki ayar
CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Seçenek3 Ortam değişkeninde aşağıdaki ayar
JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Ama hiçbir şey işe yaramadı .
İşlenmiş sonunda neler önerilen Java yaklaşımını yürütülüyor Apache HttpClient ile geçersiz SSL sertifikaları nasıl baş edilir? Pascal Thivent tarafından yani InstallCert programının yürütülmesi.
Ancak bu yaklaşım geliştirici kurulumu için iyidir, ancak üretim ortamında kullanamam.
Ben de aynı değerleri belirtmiştik zaman üç yaklaşım yukarıda işi yoktu sözü niye merak ediyorum server.xml
ait app2
ayarıyla truststore sunucu ve aynı değerlerle
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
içinde app1
programa.
Daha fazla bilgi için bağlantıyı şu şekilde yapıyorum:
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
if (conn instanceof HttpsURLConnection) {
HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();
conn1.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
reply.load(conn1.getInputStream());
domainname
RHEL sunucularıma düzgün bir şekilde ayarladığımda sorun ortadan kalktı. Umarım birine yardımcı olur.