2017-01-23 10 views
1

imaps 프로토콜을 사용하여 메일 서비스 (zimbra)에 전자 메일에 액세스하려고합니다. 내가 JavaMail에 항아리 버전을 사용하고 1.4.7imaps 프로토콜로 메일 서비스에 연결합니다. 인증서가 알고리즘을 준수하지 않습니다.

Properties props = (Properties)System.getProperties().clone(); 
// SSL setting 
props.put("mail.imaps.ssl.checkserveridentity", "false"); 
props.put("mail.imaps.ssl.trust", "*"); 
MailSSLSocketFactory socketFactory = new MailSSLSocketFactory(); 
socketFactory.setTrustAllHosts(true); 
props.put("mail.imaps.ssl.socketFactory", socketFactory); 
Store store = Session.getDefaultInstance(props).getStore("imaps"); 
store.connect(host, email, password); /* exception here */ 

인쇄 예외 : 아래 이미지에 표시된대로 나는 웹 페이지에서 인증서 (가 .crt 파일)를 가지고

javax.mail.MessagingException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints; 
    nested exception is: 
    javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints 
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:670) 
    at javax.mail.Service.connect(Service.java:295) 
    at javax.mail.Service.connect(Service.java:176) 

첫째. 둘째, 나는 여기에 사람을 잃었 어떤 키 도구 명령

keytool -importcert -file company.net.crt -keystore company.net -alias "company.net" -storepass changeit 

picture 1 picture 2

와 인증서를 가져온?

답변

0
은 코드를 변경

바로 이것 :

props.put("mail.imaps.ssl.checkserveridentity", "false"); 
props.put("mail.imaps.ssl.trust", "*"); 
Store store = Session.getInstance(props).getStore("imaps"); 
store.connect(host, email, password); /* exception here */ 

use Session.getInstance의 열쇠 변화를.

Notes for use of SSL with JavaMail에 설명 된대로 신뢰 저장소 속성을 설정하기를 바랍니다.

그래도 문제가 해결되지 않으면 JavaMail debug output을 게시하십시오. 위의 설명에서 설명한대로 일부 SSL 디버깅 등록 정보를 활성화 할 수도 있습니다.

아, JavaMail 1.4.7은 상당히 오래된 버전입니다. 가능한 경우 최신 릴리스 JavaMail 1.5.6으로 업그레이드해야합니다.

+0

WORKED !! 답변 주셔서 감사합니다, VM 인수가 누락되었습니다. 자바 메일 SLL 노트에서 찾았습니다. -Djavax.net.ssl.trustStore = $ HOME/.keystore –