2016-07-23 3 views
0

인증서를 cacerts (JAVA_HOME이 가리키는 곳)로 가져 왔지만 여전히이 오류가 발생합니다. 문제를 파악할 수 없습니다. Microsoft ESMTP 서버 인 클라이언트 메일 서버의 방화벽 문제는 없습니다. 내 서버에서 텔넷으로 연결할 수 있습니다. SSLpoke를 시도했지만 시간이 초과되었습니다. 시도 포트 25의 tcpdump, 앞뒤로 의사 소통을 볼 수 있습니다. 기본적으로 메일 서버에서 발신 이메일을 트리거하려고합니다.javax.mail.MessagingException : SMTP 호스트에 명령을 보낼 수 없습니다.

자세한 오류 로그는 다음과 같습니다

에 의해 발생 : javax.mail.MessagingException : SMTP 호스트로 명령을 보낼 수 없습니다; 중첩 예외 : javax.net.ssl.SSLHandshakeException : sun.security.validator.ValidatorException : PKIX 경로 구축 실패 : sun.security.provider.certpath.SunCertPathBuilderException : 요청한 대상에 대한 유효한 인증 경로를 찾을 수 없음 com com.sun.mail.smtp.SMTPTransport.sendCommand (SMTPTransport.java:1420) (SMTPTransport.java:847) com.sun.mail.smtp.SMTPTransport.protocolConnect (SMTPTransport.java:384) at javax.mail.Service.connect (Service.java:297) at javax.mail.Service .connect (Service.java:156) at javax.mail.Service.connect (서비스 .java : 105) at javax.mail.Transport.send0 (Transport.java:168) at javax.mail.Transport.send (Transport.java:98) at com.issuetracker.esb.mail.GmailImpl.transportMessage com.issuetracker.esb.mail.Mail.sendSRMail에서 (GmailImpl.java:94) (Mail.java:188) 키 도구로 인증서를 가져올 때

답변

0

당신이 -trustcacerts 매개 변수를 사용 했습니까?

편집 :이 주제에 관한 나의 대화는 오류가 발생하는 구체적인 이유를 다루었지만 '답'의 모양이 아니기 때문에 다시 작성합니다.

PKIX 경로를 건물 실패 : sun.security.provider.certpath.SunCertPathBuilderException가 : 에없는 요청 대상에 유효한 인증 경로를 찾을 수

이 오류가 나타냅니다의 목적에 대한 유효한 인증서 체인 실행 중의 JRE (디폴트에서는, JRE의 jre/lib/security/cacerts 파일)가 사용하고있는 상주하는 키 스토어 파일로부터 들어오는 증명서의 신뢰를 취득 할 수 없었습니다. 이것의

일반적인 원인은 다음과 같습니다 키 도구 명령을 사용하여 인증서를 가져올 때 매개 변수를 포함하는 무시

는 -trustcacerts.

JRE는 들어오는 인증서와 일치하는 인증서를 찾고있을 때이 방법으로 신뢰 된 것으로 표시된 인증서 만 고려합니다.

JRE에 아직 루트 인증서가 설치되어 있지 않은 루트 CA가 인증서에 서명했습니다.

일반적으로이 사실은 JRE가 (아직) 알지 못하는 회사 자체의 내부 CA와 같은 알 수없는 루트 인증 기관 (CA)이 서명 한 인증서를 갖거나 심지어는 타사 루트 CA 브라우저 나 OS가 이미 루트 인증서를 가지고있는 반면에, 자바는 그와 함께 제공되지 않을 수도 있습니다.

이 문제를 해결하려면 루트 CA 인증서를 구하여 설치하고 신뢰할 수 있음을 표시해야합니다.

중개자 역할을하는 인증서 서명을 제공하는 회사도 있습니다. 즉, 자체 루트 CA가 없지만 신뢰할 수있는 루트 CA가 인증서를 서명 할 수 있도록 인증서를 부여한 회사입니다 요청 (CSR).

이러한 경우에는 자신의 인증서가있을 수 있으며 기본 루트 CA가 이미 설치되고 신뢰할 수있는 반면 중간 인증서를 구해서 설치하지 않으면 '인증서 체인'이 손상되고 올바른 인증서 경로가 될 수 없습니다 만든. 요약

그래서 가능한 솔루션은 다음과 같습니다

  1. 가 -trustcacerts 매개 변수를 다른 사이트에 대한 모든 인증서 설치를 수행합니다.
  2. 키 저장소 파일에도 루트 CA 인증서가 있는지 확인하십시오. 그렇지 않은 경우 keytool -importcert -trustcacerts를 사용하여 루트 CA 인증서를 구하여 설치하십시오.
  3. 전체 체인을 완료하기위한 중간 인증서도 있는지 확인하십시오. 인증서가있는 경우 keytool -importcert -trustcacerts를 사용하여 키 저장소 파일을 구하여 설치하십시오.

참고 : 파일을 두 번 클릭하여 Windows에서 .crt 파일을 검사하면 인증서 경로를 검사하고 필요한 루트 및 중개 CA가 필요한지 표시 할 수 있는지 확인할 수 있습니다.

키 스토어 파일에 완전하고 유효한 인증서 체인을 설치하고 신뢰할 수 있으면 오류가 통과해야합니다.

+0

아니요이 매개 변수를 추가하지 않았습니다. – harsh

+0

keytool -importcert ... 명령을 이전과 같이 반복해야합니다 (cacerts 파일에서 이전 cert 별명 항목을 먼저 제거해야 함). -trustcacerts를 추가해야합니다 이미 jre/lib/security/cacerts 파일을 가리키고있다. – topdog

+0

keytool -import -file -alias -trustcacerts -keystore cacerts를 사용했지만 오류가 계속 발생합니다. – harsh

관련 문제