首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javamail java.io.IOException:无效的密钥库格式

javamail java.io.IOException:无效的密钥库格式
EN

Stack Overflow用户
提问于 2012-08-03 22:06:10
回答 2查看 8.3K关注 0票数 0

我正在尝试用javamail发送一封电子邮件,在我的本地计算机上,当我运行我的类时,邮件发送得很好。

在生产计算机上,我得到一个错误:

代码语言:javascript
运行
复制
Caused by: javax.mail.MessagingException: Could not convert socket to TLS (java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl))
        at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1230)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:378)
        at javax.mail.Service.connect(Service.java:271)
        at javax.mail.Service.connect(Service.java:91)
        at javax.mail.Service.connect(Service.java:76)
        at javax.mail.Transport.send(Transport.java:94)
        ... 8 more
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
        at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179)
        at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:199)
        at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:249)
        at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1226)
        ... 13 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
        at java.security.Provider$Service.newInstance(Provider.java:1245)
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
        at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
        at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
        at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
        at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:247)
        ... 14 more
Caused by: java.io.IOException: Invalid keystore format
        at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
        at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
        at java.security.KeyStore.load(KeyStore.java:1185)
        at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:150)
        at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at java.security.Provider$Service.newInstance(Provider.java:1221)
        ... 20 more

在安全路径中有以下文件:

代码语言:javascript
运行
复制
68595 Mar  9  2009 cacerts
 2221 Mar  9  2009 java.policy
 9937 Mar  9  2009 java.security
  132 Mar  9  2009 javaws.policy
 2940 Mar  9  2009 _local_policy.jar
 2481 Feb 28 12:54 local_policy.jar
 2469 Mar  9  2009 _US_export_policy.jar
 2465 Feb 28 12:54 US_export_policy.jar

没有trusted.certs文件。

产品使用jdk 1.6.0_13,是不是有些文件太旧了?更详细的信息直到上周一(7/30),代码中没有任何变化,而现在我得到了这个错误。

很难找出哪里出了问题,因为我甚至不知道哪个文件有问题。如果你有任何想法,我会接受的!

感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 21:06:15

最后,问题是管理员定义了一个自定义的keyStore:

-Djavax.net.ssl.keyStore=xxxxxxx.p12

它遗漏了这个:

-Djavax.net.ssl.keyStoreType=pkcs12

票数 1
EN

Stack Overflow用户

发布于 2012-08-04 01:56:19

它似乎在尝试打开密钥库文件时失败。通常,密钥库文件在运行应用程序的用户的主目录中命名为".keystore“。如果这个文件是在上周一更新的,那就可以解释为什么你的程序开始失败了。请注意,您可以通过设置javax.net.ssl.keyStore系统属性来覆盖密钥库文件的默认位置,因此也要进行检查。

问题可能是由您的信任存储区引起的,信任存储区可以通过javax.net.ssl.trustStore属性设置。

有关更多信息,请参阅JSSE Reference Guide

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11797329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档