OpenSSL s_server用RSA-PSS证书时DTLSv1.2握手失败求助
问题分析与解决
问题根源
OpenSSL 1.1.1及3.0版本中,DTLSv1.2的默认配置未适配RSA-PSS证书:
- TLSv1.2会自动识别证书的RSA-PSS密钥类型,同步启用对应的签名算法扩展;
- DTLSv1.2默认不会主动加载RSA-PSS相关签名算法,导致客户端与服务器无法协商出兼容的密码套件,最终触发「no shared cipher」错误;
- 普通RSA(PKCS#1 v1.5)证书可正常工作,是因为DTLSv1.2默认支持这类证书对应的签名算法与密码套件。
解决方法
在服务器和客户端的OpenSSL命令中,显式指定支持RSA-PSS的签名算法,同时搭配兼容的加密套件:
服务器端命令
openssl s_server -cert ee_underRoot_pss_sign_pss.crt -key ee_pss_RSA.key -CAfile CA_ROOT_PKCS1_5.crt -dtls1_2 -accept 127.0.0.1:30000 -security_debug_verbose -sigalgs rsa_pss_rsae_sha256:rsa_pss_rsae_sha384:rsa_pss_rsae_sha512 -cipher ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384
客户端命令
openssl s_client -showcerts -dtls1_2 -cert ee_underRoot_pss_sign_pss.crt -key ee_pss_RSA.key -CAfile CA_ROOT_PKCS1_5.crt -connect 127.0.0.1:30000 -security_debug_verbose -sigalgs rsa_pss_rsae_sha256:rsa_pss_rsae_sha384:rsa_pss_rsae_sha512 -cipher ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384
补充说明
-sigalgs参数指定的签名算法列表需与证书实际使用的RSA-PSS签名哈希算法匹配;-cipher参数可根据需求调整为其他兼容的DTLSv1.2套件,比如替换为AES128系列;- 可执行
openssl ciphers -V -dtls1_2查看当前OpenSSL支持的DTLSv1.2密码套件,确认所选套件的有效性。
内容的提问来源于stack exchange,提问作者ChrisKris
相关产品推荐
相关产品推荐

