0

我有一个 mule 流,需要将 smtps 消息发送到 greenmail 服务器。

mule 流使用带有配置密钥库和信任库的 smtps 连接器:

<smtps:connector name="SMTPS_Connector" validateConnections="true" doc:name="SMTP"> <smtps:tls-client path="${keystore.path}" storePassword="${keystore.password}"/> <smtps:tls-trust-store path="${truststore.path}" storePassword="${truststore.password}"/> </smtps:connector>

我的 greenmail 服务器是使用默认值启动的。

当我调用我的流程来发送电子邮件时,我会收到以下日志:

在骡子日志中:

错误 2017-03-17 19:33:38,106 [Default_HTTP_Connector.receiver.06] org.mule.exception.DefaultMessagingExceptionStrategy: ************************ ****************************************************** ****** 消息:无法连接到邮件传输。代码
:MULE_ERROR--2 -------------------------------------------------------- ------------------------------------------------ 异常堆栈为: 1. 未找到受信任的证书(sun.security .validator.ValidatorException)
sun.security.validator.SimpleValidator:396 (null) 2. sun.security.validator.ValidatorException: 未找到可信证书 (javax.net.ssl.SSLHandshakeException)
sun.security.ssl.Alerts:192 ( http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/net/ssl/SSLHandshakeException.html) 3. 无法连接到 SMTP 主机:localhost,端口:3465 (javax.mail.MessagingException) com.sun.mail.smtp.SMTPTransport:1706 ( http://java.sun.com/j2ee/sdk_1.3/ techdocs/api/javax/mail/MessagingException.html ) 4. 无法连接到邮件传输。(org.mule.api.endpoint.EndpointException)
org.mule.transport.email.SmtpMessageDispatcher:67 ( http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/endpoint/EndpointException .html) ------------------------------------------------- ------------------------------- 根异常堆栈跟踪:sun.security.validator.ValidatorException:在 sun 处未找到受信任的证书.security.validator.SimpleValidator.buildTrustedChain(SimpleValidator.java:396) 在 sun.security.validator.SimpleValidator.engineValidate(SimpleValidator.java:134) 在 sun.security.validator.Validator.validate(Validator.java:260) +另外 3 个(设置调试级别日志记录或“-Dmule.verbose.exceptions=true”为所有内容)


在 Greenmail 服务器日志中:

错误 2017-03-17 19:33:38,086 [smtps:localhost:3465<-/127.0.0.1:27671] com.icegreen.greenmail.smtp.SmtpHandler: 意外错误处理连接,退出 = javax.net.ssl.SSLException :连接已关闭:javax.net.ssl.SSLHandshakeException:在 sun.security.ssl.AppInputStream.read(AppInputStream.java :92) 在 sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) 在 sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) 在 sun.nio.cs.StreamDecoder.read(StreamDecoder. java:177) 在 java.io.InputStreamReader.read(InputStreamReader.java:184) 在 java.io.BufferedReader.fill(BufferedReader.java:154) 在 java.io.BufferedReader.readLine(BufferedReader.java:317) 在java.io。com.icegreen.greenmail.smtp.SmtpConnection.receiveLine(SmtpConnection.java:57) 上 com.icegreen.greenmail.smtp.SmtpHandler.handleCommand(SmtpHandler.java:82) 上的 BufferedReader.readLine(BufferedReader.java:382) .icegreen.greenmail.smtp.SmtpHandler.run(SmtpHandler.java:56) at com.icegreen.greenmail.server.AbstractServer$1.run(AbstractServer.java:163) at java.lang.Thread.run(Thread.java: 745)原因:javax.net.ssl.SSLHandshakeException:在 sun.security.ssl.Alerts.getSSLException(Alerts.java: 154) 在 sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1991) 在 sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1098) 在 sun.security.ssl.SSLSocketImpl。performInitialHandshake(SSLSocketImpl.java:1344) 在 sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:721) 在 sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) 在 sun.nio.cs.StreamEncoder .writeBytes(StreamEncoder.java:221) 在 sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) 在 sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295) 在 sun.nio.cs。 StreamEncoder.flush(StreamEncoder.java:141) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) at java.io.PrintWriter.flush(PrintWriter.java:320) at com.icegreen.greenmail.util.InternetPrintWriter .println(InternetPrintWriter.java:91) 在 com.icegreen.greenmail.util.InternetPrintWriter.println(InternetPrintWriter.java:196) 在 com.icegreen.greenmail.smtp.SmtpConnection.send(SmtpConnection.java:48) at com.icegreen.greenmail.smtp.SmtpHandler.sendGreetings(SmtpHandler.java:76) at com.icegreen.greenmail.smtp.SmtpHandler.run(SmtpHandler.java:53) ... 2 更多

似乎我需要在我的 Greenmail 服务器上指定一个密钥库,但我找不到这样做的方法。

我尝试在类路径中放置一个密码为“changeit”的greenmail.jks,但它在启动时给了我这个错误:

错误 2017-03-17 17:42:24,185 [smtps:localhost:3465] com.icegreen.greenmail.util.DummySSLServerSocketFactory:无法创建和初始化 SSL java.security.UnrecoverableKeyException:无法在 sun.security.provider 恢复密钥。在 sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55) 在 sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138) 在 java.security 的 KeyProtector.recover(KeyProtector.java:328) .KeyStore.getKey(KeyStore.java:804) 在 sun.security.ssl.SunX509KeyManagerImpl.(SunX509KeyManagerImpl.java:131) 在 sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:68) 在 javax.net .ssl.KeyManagerFactory.init(KeyManagerFactory.java:259) 在 com.icegreen.greenmail.util.DummySSLServerSocketFactory.(DummySSLServerSocketFactory.java:56) 在 com.icegreen.greenmail.util.DummySSLServerSocketFactory.getDefault(DummySSLServerSocketFactory.java:87) 在 com.icegreen.greenmail.server.AbstractServer.openServerSocket(AbstractServer.java:63) 在 com.icegreen.greenmail.server.AbstractServer com.icegreen.greenmail.server.AbstractServer.run(AbstractServer.java:86) 处的 .initServerSocket(AbstractServer.java:115) 线程“smtps:localhost:3465”java.lang.IllegalStateException 中的异常:无法创建和初始化 SSL在 com.icegreen.greenmail.util.DummySSLServerSocketFactory.(DummySSLServerSocketFactory.java:65) 在 com.icegreen.greenmail.util.DummySSLServerSocketFactory.getDefault(DummySSLServerSocketFactory.java:87) 在 com.icegreen.greenmail.server.AbstractServer.openServerSocket( AbstractServer.java:63) 在 com.icegreen.greenmail。server.AbstractServer.initServerSocket(AbstractServer.java:115) at com.icegreen.greenmail.server.AbstractServer.run(AbstractServer.java:86) 原因:java.security.UnrecoverableKeyException:无法在 sun.security.provider 恢复密钥。在 sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55) 在 sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138) 在 java.security 的 KeyProtector.recover(KeyProtector.java:328) .KeyStore.getKey(KeyStore.java:804) 在 sun.security.ssl.SunX509KeyManagerImpl.(SunX509KeyManagerImpl.java:131) 在 sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:68) 在 javax.net .ssl.KeyManagerFactory.init(KeyManagerFactory.java:259) 在 com.icegreen.greenmail.util.DummySSLServerSocketFactory.(DummySSLServerSocketFactory.爪哇:56)

4

2 回答 2

0

你是如何创建 greenmail.jks 的?如果您使用“keytool -genkey ....”,请注意您将使用 2 个密码。

第一个引用 .jks 文件,第二个引用密钥密码。如果您使用此 jks 设置服务器,则必须同时设置“密钥密码”和“密码”,否则您将收到错误消息:

sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138) 在 sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55) 在

keytool 命令示例:

keytool -genkey -keyalg RSA -alias selfsigned -keystore greenmailServer.jks -storepass 密码 -validity 360 -keysize 2048

按照步骤操作,注意系统会要求您输入“密钥密码”。

不幸的是,我无法帮助您设置 smtp 服务器,我想这不是替代品。

问候!

于 2017-03-21T13:54:37.897 回答
0

为了解决这个问题,我不得不将所有密码(密钥库、密钥)更改为 greenmail 的默认密码。目前,我无法更改正在使用的套接字工厂,因此我无法更改 greenmail 密码,因为它是在套接字工厂中硬编码的。

于 2017-04-04T02:55:55.757 回答