我可以从我的工作站连接并发送自己的电子邮件
工作站版本:
但是在服务器上我收到错误:
javax.mail.MessagingException: Could not connect to SMTP host:
smtpa.state.ak.us, port: 465
(java.net.SocketException: java.security.NoSuchAlgorithmException:
Error constructing implementation
(algorithm: Default, provider: SunJSSE,
class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl))
堆栈跟踪底部的是以下部分
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl.getCacertsKeyStore(Unknown Source)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultTrustManager(Unknown Source)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
... 76 more
Caused by: java.security.UnrecoverableKeyException: Password verification failed
... 88 more
服务器正在运行:
Javamail与我的Web应用程序捆绑在一起,版本为 1.4.3
修改:
为了完整起见,我将捆绑的 Javamail 升级为 1.5.0-b01
我仍然遇到同样的错误。
keytool -list -keystore <path-to-default-java-keystore>
适用于两个系统。
进一步修改:
经过多次挖掘后,我发现了这个问题:Accessing Tomcat's configured KeyStore and TrustStore
我在应用程序中添加了一些日志记录语句: 我在Workstation上得到的结果与在服务器上的结果相同。
10-25@12:20:30 DEBUG [statements] TextEmail - javax.net.ssl.trustStore: null
10-25@12:20:30 DEBUG [statements] TextEmail - javax.net.ssl.trustStorePassword: fedizPass
10-25@12:20:30 DEBUG [statements] TextEmail - javax.net.ssl.trustStoreType: null
10-25@12:20:30 DEBUG [statements] TextEmail - javax.net.ssl.keyStore: null
10-25@12:20:30 DEBUG [statements] TextEmail - javax.net.ssl.keyStorePassword: fedizPass
10-25@12:20:30 DEBUG [statements] TextEmail - javax.net.ssl.keyStoreType: null
如果仔细查看,则不会返回默认密码,也不会返回信任存储。 我为 WS-FEDERATION配置了 Fediz-1.1.0-SNAPSHOT trustStore 我的Fediz代码正在使用 Spring-安全性插件。所有这一切都正常。我在WorkStation和Test Server上都部署了第二个应用程序,它也使用了它。它也可以正常工作,并可以通过FTPS将文件发送到另一台服务器。另外如果它在SystemProperties中提供了错误的密码,那为什么它在我的工作站上工作而不在服务器上呢?
答案 0 :(得分:1)
感谢@Bill Shannon我能够让它发挥作用。
我最终扩展MailSSLSocketFactory
,Javamail - SSLNotes中的示例中列出了System.getProperty("java.home")
我跟着JSSE Reference - Creating Your Own X509TrustManager了
我用它来添加一个Backup TrustManager,它从X509TrustManager
获取默认的 KeyStore 并传入默认密码。如果MailSSLSocketFactory
创建的默认验证无法验证证书,它会尝试将{{1}}设置为后备。
答案 1 :(得分:0)
您的Tomcat配置可能正在选择具有非默认密码的其他密钥库吗?