gpt4 book ai didi

javamail 在工作站上通过 tls 发送,但不在服务器上发送

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:58 25 4
gpt4 key购买 nike

我可以从我的工作站正常连接并给自己发送电子邮件

工作站版本:

  • Java - 1.6.0_21
  • Tomcat - 6.0.29

但是在服务器上我得到一个错误:

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

服务器正在运行:

  • Java - 1.6.0_18-b-07
  • Tomcat - 6.0.28

Javamail 与我的 Web 应用程序捆绑在一起,版本为 1.4.3

编辑:

为了完整起见,我将捆绑的 Javamail 升级到了 1.5.0-b01
我仍然遇到同样的错误。

keytool -list -keystore <path-to-default-java-keystore>使用默认的 java keystore 密码适用于两个系统。

进一步编辑:

经过更多挖掘后,我发现了这个 SO 问题:Accessing Tomcat's configured KeyStore and TrustStore

我在我的应用程序中添加了一些日志记录语句:我在工作站上获得的结果与在服务器上获得的结果相同。

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

如果你仔细看,没有返回默认密码,trust Store 也没有。我为 WS-FEDERATION 配置了自定义 trustStore Fediz-1.1.0-SNAPSHOT 我的 Fediz 代码使用的是 Spring-安全 插件。所有这些都正常工作。我在我的工作站和测试服务器上部署了第二个应用程序,它也使用它。它还可以正常工作,可以通过 FTPS 将文件发送到另一台服务器。另外,如果它在 SystemProperties 中提供了错误的密码,那么为什么它在我的工作站上有效,但在服务器上无效?

最佳答案

多亏了@Bill Shannon,我才能够让它工作。

我最终扩展了 MailSSLSocketFactory,在 Javamail - SSLNotes 中的示例中列出
我关注了JSSE Reference - Creating Your Own X509TrustManager
我用它来添加一个 Backup TrustManager,它从 System.getProperty("java.home") 获取默认的 KeyStore 并传入默认密码。它尝试将 X509TrustManager 设置为备用,以防 MailSSLSocketFactory 创建的默认证书无法验证证书。

关于javamail 在工作站上通过 tls 发送,但不在服务器上发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com