WSO2 API Manager 2.6.0集成AWS SES无法使用TLSv1.2求助
解决WSO2 API Manager 2.6.0强制邮件客户端使用TLSv1.2的方案
针对WSO2 APIM 2.6.0(Java8环境)连接AWS SES发邮件时因TLS版本过低被拒绝的问题,以下是经过验证的解决步骤:
1. 完善邮件适配器配置
打开<APIM_HOME>/repository/conf/output-event-adapters.xml,找到邮件适配器的配置块,确保添加/启用以下关键属性:
- 启用STARTTLS并强制要求:这是AWS SES SMTP端口(587)的必要配置
- 明确指定TLSv1.2协议
示例完整配置片段:
<adapterConfig type="email"> <property key="mail.smtp.host">email-smtp.<region>.amazonaws.com</property> <property key="mail.smtp.port">587</property> <property key="mail.smtp.auth">true</property> <property key="mail.smtp.starttls.enable">true</property> <property key="mail.smtp.starttls.required">true</property> <property key="mail.smtp.ssl.protocols">TLSv1.2</property> <property key="mail.smtp.user">你的SES SMTP用户名</property> <property key="mail.smtp.password">你的SES SMTP密码</property> </adapterConfig>
2. 添加JVM全局TLS强制参数
修改<APIM_HOME>/bin/wso2server.sh(Linux)或<APIM_HOME>/bin/wso2server.bat(Windows),在JVM启动参数中追加以下内容:
# Linux环境在JAVA_OPTS中追加 JAVA_OPTS="$JAVA_OPTS -Djdk.tls.client.protocols=TLSv1.2 -Dmail.smtp.ssl.protocols=TLSv1.2 -Dhttps.protocols=TLSv1.2"
:: Windows环境在JAVA_OPTS中追加 set JAVA_OPTS=%JAVA_OPTS% -Djdk.tls.client.protocols=TLSv1.2 -Dmail.smtp.ssl.protocols=TLSv1.2 -Dhttps.protocols=TLSv1.2
注意:仅添加-Dhttps.protocols无效,因为邮件客户端使用SMTP协议,需同时指定JDK客户端全局TLS协议和SMTP专属的TLS参数。
3. 确保Java8未禁用TLSv1.2
检查<JAVA_HOME>/jre/lib/security/java.security文件,确认jdk.tls.disabledAlgorithms条目里没有包含TLSv1.2,如果有则移除该内容并保存。
4. 清理缓存并重启服务
- 删除
<APIM_HOME>/repository/tmp和<APIM_HOME>/repository/work目录下的所有缓存文件 - 重启WSO2 APIM服务,让配置生效
5. 验证功能
触发密码重置流程,确认邮件能成功发送,不再出现TLS版本相关的报错。
内容的提问来源于stack exchange,提问作者andyEngineering
相关产品推荐
相关产品推荐

