Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javamail在工作站上通过tls发送,但不在服务器上_Java_Ssl_Jakarta Mail_Keystore - Fatal编程技术网

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

javamail在工作站上通过tls发送,但不在服务器上,java,ssl,jakarta-mail,keystore,Java,Ssl,Jakarta Mail,Keystore,我可以从我的工作站连接并发送电子邮件 工作站版本: Java-1.6.0\u 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: Err

我可以从我的工作站连接并发送电子邮件

工作站版本:

  • Java-1.6.0\u 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))  
stacktrace的底部是以下部分

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
如果仔细查看,默认密码不会返回,信任存储也不会返回。
我为WS-FEDERATION配置了自定义信任库,我的Fediz代码使用的是Spring Security插件。所有这些都能正常工作。我在工作站和测试服务器上都部署了第二个应用程序,它也在使用它。它也可以正常工作,可以通过FTPS将文件发送到另一台服务器。如果它在SystemProperties中提供了错误的密码,那么,为什么它在我的工作站上工作,而在服务器上不工作呢?

可能是您的Tomcat配置选择了一个具有非默认密码的不同密钥库?

可能是您的Tomcat配置选择了具有非默认密码的不同密钥库?

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

我最终扩展了
mailssocketfactory
,在
我遵循了

我使用它添加了一个备份信任管理器,它从
System.getProperty(“java.home”)
获取默认密钥库,并传入默认密码。它试图将
X509TrustManager
设置为备用,以防
MailSSLSocketFactory
创建的默认证书无法验证证书。

多亏@Bill Shannon,我才能够使其正常工作

我最终扩展了
mailssocketfactory
,在
我遵循了

我使用它添加了一个备份信任管理器,它从
System.getProperty(“java.home”)
获取默认密钥库,并传入默认密码。它试图将
X509TrustManager
设置为备用,以防
MailSSLSocketFactory
创建的默认密钥无法验证证书。

如何判断它是否指向其他密钥库?我尝试将
JAVA_OPTS=“$JAVA_OPTS-Djavax.net.ssl.trustStore=$JAVA_HOME/lib/security/cacerts-Djavax.net.ssl.trustStorePassword=changeit”
添加到Catalina.sh,但没有任何帮助。请参阅中的调试部分。也许一些额外的JSSE调试输出会有所帮助。您还可以尝试从程序中打印javax.net.ssl.trustStore属性,以确保它的设置符合预期。它们似乎都没有打印出来。(我刚刚意识到我的Log4J设置可能会将其压扁。)但是,打印javax.net.ssl.*store*属性(如编辑中指定的)帮助我意识到访问信任库的密码设置错误。因此,我最终基于
mailssocketfactory
将TrustManager连接在一起。可能不是最好的方法,但很有效。我如何判断它是否指向不同的密钥库?我尝试将
JAVA_OPTS=“$JAVA_OPTS-Djavax.net.ssl.trustStore=$JAVA_HOME/lib/security/cacerts-Djavax.net.ssl.trustStorePassword=changeit”
添加到Catalina.sh,但没有任何帮助。请参阅中的调试部分。也许一些额外的JSSE调试输出会有所帮助。您还可以尝试从程序中打印javax.net.ssl.trustStore属性,以确保它的设置符合预期。它们似乎都没有打印出来。(我刚刚意识到我的Log4J设置可能会将其压扁。)但是,打印javax.net.ssl.*store*属性(如编辑中指定的)帮助我意识到访问信任库的密码设置错误。因此,我最终基于
mailssocketfactory
将TrustManager连接在一起。可能不是最好的方法,但很有效。
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