편집 :- 내 블로그 에서 질문을 더 표현 가능한 방식으로 형식화하려고 시도했습니다.
원래 문제는 다음과 같습니다.
이 오류가 발생합니다.
자세한 메시지 sun.security.validator.ValidatorException : PKIX 경로 작성 실패 :
sun.security.provider.certpath.SunCertPathBuilderException : 요청 된 대상에 대한 유효한 인증 경로를 찾을 수 없습니다.원인 javax.net.ssl.SSLHandshakeException : sun.security.validator.ValidatorException : PKIX 경로 작성 실패 : sun.security.provider.certpath.SunCertPathBuilderException : 요청 된 대상에 대한 유효한 인증 경로를 찾을 수 없습니다.
Tomcat 6을 웹 서버로 사용하고 있습니다. 다른 포트의 다른 Tomcat에 동일한 시스템에 두 개의 HTTPS 웹 응용 프로그램이 설치되어 있습니다. 말 App1(port 8443)
과
App2(port 443)
. App1
에 연결합니다 App2
. 에 App1
연결할 때 App2
위의 오류가 발생합니다. 나는 이것이 매우 일반적인 오류이므로 다른 포럼과 사이트의 많은 솔루션을 발견했습니다. server.xml
두 Tomcat 에 아래 항목이 있습니다 .
keystoreFile="c:/.keystore"
keystorePass="changeit"
모든 사이트는 app2가 제공 한 인증서가 app1 jvm의 신뢰할 수있는 저장소에없는 것과 같은 이유를 말합니다. IE 브라우저에서 동일한 URL을 누르려고 할 때도 마찬가지입니다.이 웹 사이트의 보안 인증서에 문제가 있습니다.이 웹 사이트를 계속 진행하십시오. 그러나 동일한 URL이 Java 클라이언트 (내 경우)에 충돌하면 위의 오류가 발생합니다. 그래서 그것을 신뢰 저장소에 넣으려면 다음 세 가지 옵션을 시도했습니다.
옵션 1
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
옵션 2 환경 변수에서 아래 설정
CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
옵션 3 환경 변수에서 아래 설정
JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
그러나 아무것도 효과가 없었습니다 .
마지막 으로 Apache HttpClient로 유효하지 않은 SSL 인증서를 처리하는 방법에서 제안 된 Java 접근 방식을 실행하고 있습니까? Pascal Thivent에 의해, 즉 InstallCert 프로그램을 실행합니다.
그러나이 방법은 devbox 설정에는 적합하지만 프로덕션 환경에서는 사용할 수 없습니다.
나는 동일한 값을 언급 할 때 세 가지 방법은 위의 일을하지 않았다 언급 왜 궁금 server.xml
의 app2
설정에 의해 신뢰 저장소에 서버와 같은 값
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
에서 app1
프로그램.
자세한 내용은 연결 방법입니다.
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 서버에 올바르게 설정 하면 문제가 사라졌습니다. 그것이 누군가를 돕기를 바랍니다.