我可以在工作站上连接并向自己发送电子邮件
工作站版本:
但是在服务器上,我得到一个错误:
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>
默认的Java密钥库密码在两个系统上均可使用。
进一步编辑:
经过更多的挖掘之后,我发现了这样的问题:访问Tomcat的配置的KeyStore和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配置了一个自定义trustStore的Fediz-1.1.0-SNAPSHOT我的Fediz代码正在使用Spring-Security插件。所有这些都能正常工作。我在WorkStation和Test Server上都部署了第二个应用程序,该应用程序也使用了它。它也可以正常工作,并且可以通过FTPS将文件发送到另一台服务器。另外,如果在SystemProperties中提供了错误的密码,那么为什么它在我的工作站而不在服务器上可以工作?
多亏了@Bill Shannon,我才得以将其投入使用。
我结束了延伸MailSSLSocketFactory
,在一个示例中列出的JavaMail - SSLNotes
我跟着JSSE参考-创建自己的X509TrustManager
我用它来添加一个备份的TrustManager,抓住默认密钥库从System.getProperty("java.home")
并通过默认密码。如果X509TrustManager
由创建的默认MailSSLSocketFactory
证书无法验证证书,它将尝试将其设置为备用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句