Как отправить SMTP-сообщение на автономный сервер Greenmail
У меня есть поток мулов, который должен отправить SMTP-сообщение на сервер 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 [De fault_HTTP_Connector.receiver.06] org.mule.exception.De faultMessagingExceptionStrategy: ******************************************************************************** Сообщение: невозможно подключиться к почтовому транспорту. Код
: 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 Server:
ОШИБКА 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: Получено фатальное оповещение: Certificate_unknown на sun.security.ssl.SSLSocketImpl.checkEOF (SSLSocketImpl.java:1508) на sun.security.ssl.AppInputStream.read (AppInputSt): 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.BufferedReader.readLine (BufferedReader.java:382) по адресу com.icegreen.greenmail.smtp.SmtpConnection.receiveLine (SmtpConnection.java:57) по адресу com.icegreen.greenmail.smtp.SmtpHandler.handleCommand (SmtpHandler). va: 82) на com.icegreen.greenmail.smtp.SmtpHandler.run (SmtpHandler.java:56) на com.icegreen.greenmail.server.AbstractServer $ 1.run (AbstractServer.java:163) на java.lang.Thread. run (Thread.java:745) Вызывается: javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: certificate_unknown at sun.security.ssl.Alerts.getSSLException (Alerts.java:192) в sun.security.ssl.Alerts. getSSLException (Alerts.java:154) в sun.security.ssl.SSLSocketImpl.recvAlert (SSLSocketImpl.java:1991) в sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:1098I) в sun.seco.ssl..performInitialHandshake (SSLSocketImpl.java:1344) в sun.security.ssl.SSLSocketImpl.writeRecord (SSLSocketImpl.java:721) в sun.security.ssl.AppOutputStream.write (AppOutputStream.java.io): 2 StreamEncoder.writeBytes (StreamEncoder.java:221) в sun.nio.cs.StreamEncoder.implFlushBuffer (StreamEncoder.java:291) в sun.nio.cs.StreamEncoder.implFlush (StreamEncoder.java:295) в.StreamEncoder.flush (StreamEn coder.java:141) в java.io.OutputStreamWriter.flush (OutputStreamWriter.java:229) в java.io.PrintWriter.flush (PrintWriter.java:320) в com.icegreen.greenmail.util.InternetPrintWriter.println (InternetPr.java: 91) на com.icegreen.greenmail.util.InternetPrintWriter.println (InternetPrintWriter.java:196) на com.icegreen.greenmail.smtp.SmtpConnection.send (SmtpConnection.java:48) на com.icegreen.greenmail. smtp.SmtpHandler.sendGreetings (SmtpHandler.java:76) на com.icegreen.greenmail.smtp.SmtpHandler.run (SmtpHandler.java:53)... еще 2
Кажется, мне нужно указать хранилище ключей на моем сервере Greenmail, но я не могу найти способ сделать это.
Я попытался поместить greenmail.jks с паролем 'changeit' в путь к классам, но он выдает мне эту ошибку при запуске:
ОШИБКА 17-03-2017, 17:42:24,185 [smtps:localhost:3465] com.icegreen.greenmail.util.DummySSLServerSocketFactory: не удается создать и инициализировать SSL. Java.security.UnrecoverableKeyException: не удается восстановить ключ в sun.security.provider.KeyProtector.recover(KeyProtector.java:328) в sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138) в sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55) в j.KeyStore.getKey(KeyStore.java:804) в sun.security.ssl.SunX509KeyManagerImpl.(SunX509KeyManagerImpl.java:131) в sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit:F_ImpF_Imp_Imp_Imp_Imp_Imp_FB.ssl.KeyManagerFactory.init(KeyManagerFactory.java:259) по адресу com.icegreen.greenmail.util.DummySSLServerSocketFactory.(DummySSLServerSocketFactory.java:56) по адресу com.icegreen.greenmail.util.DummySSe fj.Sory.Fory.SoryServer () на com.icegreen.greenmail.server.AbstractServer.openServerSocket(AbstractServer.java:63) в com.icegreen.greenmail.server.AbstractServer.initServerSocket(AbstractServer.java:115) в com.icegreen.greenmail.server.AbstractServer.run(AbstractServer.java:86) Исключение в потоке "smtps:localhost:3465" java.lang.IllegalStateException: Невозможно создать и инициализировать SSL в com.icegreen.greenmail.util.DummySSLServerSocketFactory.(DummySSLServerSocketFactory.java:65) в com.icegreen.greenmail.util.DummySSLServerSocketFactoryj.Server.oSense:87 com.icegreen.greenmail.server.AbstractServer.openServerSocket (AbstractServer.java:63) в com.icegreen.greenmail.server.AbstractServer.initServerSocket(AbstractServer.java:115) в com.icegreen.greenmail.server.AbstractSer AbstractServer.java:86) Причина: java.security.UnrecoverableKeyException: Невозможно восстановить ключ в sun.security.provider.KeyProtector.recover (KeyProtector.java:328) в sun.security.provider.JavaKeyStore.engineGetKey (JavaKeyStore.java: 138) в sun.security.provider.JavaKeyStore $ JKS.engin eGetKey (JavaKeyStore.java:55) в java.security.KeyStore.getKey(KeyStore.java:804) в sun.security.ssl.SunX509KeyManagerImpl.(SunX509KeyManagerImpl.java:131) в sun.security.mpan.Fl.engineInit(KeyManagerFactoryImpl.java:68) на javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:259) на com.icegreen.greenmail.util.DummySSLServerSocketFactory. (DummySSLServerSocketFactory).
2 ответа
Чтобы решить эту проблему, мне пришлось изменить все пароли (хранилище ключей, ключи) на пароль по умолчанию для Greenmail. В настоящее время я не могу изменить используемую фабрику сокетов, поэтому не могу изменить пароль greenmail, поскольку он жестко задан в фабрике сокетов.
Как вы создаете greenmail.jks? Если вы используете "keytool -genkey ....", обратите внимание, что у вас будет 2 пароля.
Первый относится к файлу.jks, а второй - к паролю ключа. Если вы настраиваете сервер с помощью этого jks, вам придется установить и "Key Password", и "Password", в противном случае вы получите сообщение об ошибке:
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 пароль -valid 360 -keysize 2048
Следуйте инструкциям и обратите внимание, что вам будет предложено ввести "пароль ключа".
К сожалению, я не могу помочь вам в настройке SMTP-сервера, и я думаю, что это не замена для этого.
С уважением!