Java 17环境下Logback SMTPAppender对接AWS SES报TLS认证失败求助
问题原因
该报错是因为Java 17对网络安全默认配置做了调整,原有Logback SMTP配置没有显式启用STARTTLS,而AWS SES的587端口要求必须走STARTTLS加密传输,同时低版本JavaMail依赖也可能存在TLS版本适配问题。
解决方案
1. 调整SMTPAppender配置,显式开启STARTTLS
在原有配置基础上增加<STARTTLS>true</STARTTLS>配置项,还可添加SSL校验相关配置避免握手失败,修改后的完整配置如下:
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>email-smtp.us-east-1.amazonaws.com</smtpHost> <smtpPort>587</smtpPort> <username>name</username> <password>password</password> <!-- 新增STARTTLS配置 --> <STARTTLS>true</STARTTLS> <!-- 可选:开启SSL服务端身份校验,保证连接安全性 --> <sslCheckServerIdentity>true</sslCheckServerIdentity> <to>${TO}</to> <from>${FROM}</from> <subject>${HOSTNAME}: %logger{30} -</subject> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date %-5level %logger{35} -[%t, U_%X{userId}, T_%X{traceId}]- %message%n</pattern> </layout> <asynchronousSending>true</asynchronousSending> <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker"> <bufferSize>1</bufferSize> </cyclicBufferTracker> </appender>
2. 升级JavaMail相关依赖
如果修改配置后仍然报错,大概率是使用的javax.mail依赖版本过低,和Java 17的默认TLS配置不兼容:
- 若使用旧版
com.sun.mail:javax.mail,请升级到1.6.2及以上版本 - 也可直接切换到最新的Jakarta Mail依赖(
org.eclipse.angus:jakarta.mail2.0+版本),适配Java 17以上版本的安全规范
3. 可选:临时调整JVM安全配置(仅排查用,不建议生产环境使用)
如果上面两种方案都无效,可临时修改JDK的java.security配置文件,把jdk.tls.disabledAlgorithms里的TLSv1、TLSv1.1相关条目暂时移除,验证是否是TLS版本限制导致的问题,生产环境优先通过升级依赖解决,不建议关闭安全限制。
4. 可选:切换到SES 465 SSL端口
如果不想用STARTTLS模式,也可以直接把SMTP端口改成AWS SES提供的465 SSL端口,调整对应配置即可:
<smtpPort>465</smtpPort> <ssl>true</ssl> <sslCheckServerIdentity>true</sslCheckServerIdentity>
内容的提问来源于stack exchange,提问作者Bizon4ik
相关产品推荐
相关产品推荐

