使用imaps协议连接到邮件服务,证书不符合算法



我正在尝试使用imaps协议访问邮件服务(zimbra)的电子邮件。我使用的是javaMail jar 1.4.7版

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 */

打印异常:

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)

首先,我从网页上获得了证书(.crt文件),如下图所示。第二,我已经用密钥工具命令导入了证书

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

图片1图2

伙计们,我在这里错过了什么?

将代码更改为:

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 */

注意使用Session.getInstance.的关键更改

希望您也设置了信任存储属性,如Notes中所述,以便将SSL与JavaMail一起使用。

如果仍然不起作用,请发布JavaMail调试输出。您可能还希望启用上面注释中描述的一些SSL调试属性。

哦,JavaMail 1.4.7已经很旧了。如果可能的话,您应该升级到最新版本的JavaMail 1.5.6。

最新更新