Sunting: - Mencoba memformat pertanyaan dan menerima jawaban dengan cara yang lebih rapi di Blog saya
Ini masalah aslinya.
Saya mendapatkan kesalahan ini:
Pesan rinci sun.security.validator.ValidatorException: PKIX bangunan path gagal:
kesalahan sun.security.provider.certpath.SunCertPathBuilderException: tidak dapat menemukan jalur sertifikasi yang valid untuk target yang dimintasebab javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: gagal membangun jalur PKIX: sun.security.provider.certpath.SunCertPathBuilderException: tidak dapat menemukan jalur sertifikasi yang valid untuk target yang diminta
Saya menggunakan Tomcat 6 sebagai server web. Saya memiliki dua aplikasi web HTTPS diinstal pada Tomcats berbeda pada port yang berbeda tetapi pada mesin yang sama. Katakan App1(port 8443)
dan
App2(port 443)
. App1
terhubung ke App2
. Ketika App1
terhubung ke App2
saya mendapatkan kesalahan di atas. Saya tahu ini adalah kesalahan yang sangat umum sehingga menemukan banyak solusi di berbagai forum dan situs. Saya memiliki entri di bawah ini server.xml
dari kedua Tomcats:
keystoreFile="c:/.keystore"
keystorePass="changeit"
Setiap situs mengatakan alasan yang sama bahwa sertifikat yang diberikan oleh app2 tidak ada di toko tepercaya app1 jvm. Ini tampaknya benar juga ketika saya mencoba untuk menekan URL yang sama di browser IE, itu berfungsi (dengan pemanasan, Ada masalah dengan sertifikat keamanan situs web ini. Di sini saya katakan lanjutkan ke situs web ini). Tetapi ketika URL yang sama terkena oleh klien Java (dalam kasus saya) saya mendapatkan kesalahan di atas. Jadi untuk meletakkannya di truststore saya mencoba tiga opsi ini:
Pilihan 1
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Pengaturan Opsi2 di bawah ini dalam variabel lingkungan
CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Pengaturan Opsi3 di bawah ini dalam variabel lingkungan
JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Tapi tidak ada yang berhasil .
Apa yang akhirnya berhasil adalah mengeksekusi pendekatan Java yang disarankan dalam Bagaimana menangani sertifikat SSL yang tidak valid dengan Apache HttpClient? oleh Pascal Thivent yaitu menjalankan program InstallCert.
Tetapi pendekatan ini baik untuk pengaturan devbox tapi saya tidak bisa menggunakannya di lingkungan produksi.
Saya bertanya-tanya mengapa tiga pendekatan yang disebutkan di atas tidak bekerja ketika saya sebutkan nilai yang sama di server.xml
dari app2
server dan sama nilai-nilai dalam truststore oleh pengaturan
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
dalam app1
program.
Untuk informasi lebih lanjut, inilah cara saya membuat koneksi:
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
di server RHEL saya masalahnya hilang. Semoga ini bisa membantu seseorang.