已在nginx.conf配置TLS_AES_128_CCM_SHA256 cipher却无法连接
问题分析与解决
核心问题根源
- TLS 1.3套件与旧版本管理分离:OpenSSL 1.1.1中,TLS 1.3加密套件和TLS 1.2及以下版本的套件是分开维护的。
openssl ciphers命令默认仅列出TLS 1.2及以下的套件,因此用openssl ciphers -v | grep CCM无法找到TLS 1.3的CCM套件。 - s_client参数误用:连接TLS 1.3时,指定套件需要使用
-ciphersuites参数,而非-cipher——后者仅适用于TLS 1.2及以下版本。 - nginx配置指令错误:nginx中
ssl_ciphers仅负责配置TLS 1.2及以下的加密套件,TLS 1.3的套件必须通过ssl_ciphersuites指令单独配置。你将TLS 1.3的CCM套件放在ssl_ciphers里,nginx无法识别生效。
具体解决步骤
1. 验证OpenSSL对TLS 1.3 CCM套件的支持
执行以下命令查看TLS 1.3的所有支持套件:
openssl ciphers -v -s -tls1_3
你会看到TLS_AES_128_CCM_SHA256和TLS_AES_128_CCM_8_SHA256出现在列表中。
2. 修正openssl s_client连接命令
改用-ciphersuites参数指定TLS 1.3套件:
openssl s_client -connect 192.168.2.15:443 -ciphersuites TLS_AES_128_CCM_SHA256 -tls1_3
3. 修正nginx配置
将TLS 1.3的套件从ssl_ciphers中移出,单独配置到ssl_ciphersuites指令中,示例配置如下:
# TLS 1.2及以下版本的加密套件 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES128-CCM:AES256-GCM-SHA384:AES128-GCM-SHA256:CHACHA20-POLY1305-SHA256'; # TLS 1.3的加密套件 ssl_ciphersuites 'TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256'; # 确保启用TLS 1.3 ssl_protocols TLSv1.2 TLSv1.3;
修改后重启nginx:
systemctl restart nginx
完成以上步骤后,再用修正后的s_client命令测试,即可正常匹配到TLS 1.3的CCM套件。
内容的提问来源于stack exchange,提问作者raw-bean
相关产品推荐
相关产品推荐

