我知道这个话题还有其他一些问题(有答案)。但这些都对我没有帮助。
我有一个具有以下配置的后缀服务器(debian 10 上的后缀 3.4.14)(只有有趣的部分):
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_exclude_ciphers = aNULL, LOW, EXP, MEDIUM, ADH, AECDH, MD5, DSS, ECDSA,
CAMELLIA128, 3DES, CAMELLIA256, RSA+AES, eNULL
smtp_tls_exclude_ciphers = aNULL, LOW, EXP, MEDIUM, ADH, AECDH, MD5, DSS, ECDSA,
CAMELLIA128, 3DES, CAMELLIA256, RSA+AES, eNULL
tls_preempt_cipherlist = yes
tls_high_cipherlist = !aNULL:!eNULL:!CAMELLIA:HIGH:@STRENGTH
Run Code Online (Sandbox Code Playgroud)
如果我使用 openssl 检查配置,我会得到(请注意,我使用“xxxxxx.de”使域名无法识别):
#> openssl s_client -connect xxxxxx.de:25 -starttls smtp
CONNECTED(00000003)
depth=3 O …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 JavaMailSender 在 Spring Boot 中发送邮件,但出现此错误:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate). Failed messages: javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
Run Code Online (Sandbox Code Playgroud)
经过一些阅读后,我发现这是因为我们使用的是过时的 TLSv1 或 TLSv1.1,我们应该使用 v1.2 或更高版本。我尝试在 application.yml 中添加值为 TLSv1.2 的 ssl.protocols 属性,但它似乎不起作用。这是我的 application.yml:
spring:
mail:
host: smtp.gmail.com
port: 587
username: ******@gmail.com
password: *******
protocol: smtp
tls: true
properties.mail.smtp:
auth: true
ssl.trust: smtp.gmail.com
starttls.required: true
starttls.enabled: true
ssl.protocols: TLSv1.2 …Run Code Online (Sandbox Code Playgroud)