如何将Peer签名类型改为RSA?Nginx与OpenSSL配置求助
把Docker环境从Debian(debian:stretch-slim)升级到Ubuntu(FROM ubuntu:focal),同时将Web服务器从Apache2换成Nginx后,遇到了自签名证书Peer签名类型不匹配的问题。需要把Peer签名类型改成RSA,强制OpenSSL用RSA而非RSA-PSS。
用openssl s_client -showcerts -connect myserver命令测试,结果对比:
旧服务器(Debian+Apache2)输出:
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bitsSSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
新服务器(Ubuntu+Nginx)输出:
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
已经在Nginx配置里加了ssl_ecdh_curve prime256v1;,解决了服务器临时密钥的问题(现在显示Server Temp Key: ECDH, P-256, 256 bits),但还是没法把Peer签名类型改成RSA。
当前Nginx配置如下:
server { listen 443 ssl; server_name localhost; client_max_body_size 100m; ssl_certificate /etc/nginx/ssl/server2.crt; ssl_certificate_key /etc/nginx/ssl/server2.key; ssl_protocols TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve prime256v1; # 不加这行的话Ubuntu服务器会显示Server Temp Key: X25519, 253 bits ssl_prefer_server_ciphers on; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_redirect off; proxy_ssl_name $host; proxy_pass http://puma; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; } access_log /var/log/nginx/ssl_access_log; error_log /var/log/nginx/ssl_error_log; }
修改OpenSSL默认签名算法配置:在Ubuntu系统中(Docker环境需在镜像构建时修改或挂载配置文件),编辑
/etc/ssl/openssl.cnf,找到[ssl_default_sect]部分,添加或修改成:SignatureAlgorithms = RSA+SHA256,RSA+SHA384,RSA+SHA512这会强制OpenSSL优先使用RSA签名算法,跳过RSA-PSS。
给Nginx添加签名算法指定指令:在Nginx的server配置块里加上
ssl_signature_algs参数,明确指定允许的签名算法:ssl_signature_algs RSA+SHA256;这个指令直接控制Nginx使用的签名算法列表,优先选RSA相关的。
重新生成自签名证书(可选):如果上面的配置改了还是没用,可能是旧证书的密钥类型或签名算法有问题。重新生成一个用RSA签名的自签名证书:
openssl req -x509 -newkey rsa:2048 -sha256 -nodes -keyout server2.key -out server2.crt -days 3650生成的时候要确保用
-sha256和RSA密钥类型,避免默认用RSA-PSS。重启Nginx生效:改完配置后,重启Nginx让设置生效:
nginx -s reload
内容的提问来源于stack exchange,提问作者MysteriousNothing

