You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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 bits

SSL-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:52:28