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

如何配置Nginx以提示用户从系统证书库选择客户端证书?

Nginx配置:HTTPS握手时要求客户端证书并触发浏览器选择弹窗

我需要配置Nginx,让它在HTTPS握手阶段要求并请求客户端证书,实现效果是浏览器弹出选择对话框,用户可以从macOS钥匙串访问或Windows证书存储里挑选证书。当用户访问安全页面(比如https://myapp.local)时,浏览器要提示用户从已连接的e-Token或智能卡(例如通过SafeNet、TokenD这类中间件)中选择客户端证书。

以下是我当前的Nginx配置:

server {
    listen 443 ssl;
    server_name localhost;
    
    # 服务器证书
    ssl_certificate /etc/nginx/certs/server/server.crt;
    ssl_certificate_key /etc/nginx/certs/server/server.key;
    
    # 客户端证书配置
    ssl_client_certificate /etc/nginx/certs/ca/ca.crt;
    ssl_verify_client on;
    ssl_verify_depth 2;
    
    # SSL协议与加密套件配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
    # 网站根目录
    root /usr/share/nginx/html;
    index index.html;
    
    # 此路径需要验证客户端证书
    location /secure {
        ssl_verify_client on;
        
        if ($ssl_client_verify = SUCCESS) {
            return 200 "证书验证成功!";
        }
        
        return 403 "未提供有效证书";
    }
    
    # 常规访问路径
    location / {
        add_header X-Client-Verify $ssl_client_verify;
        add_header X-Client-DN $ssl_client_s_dn;
        add_header X-Client-Issuer $ssl_client_i_dn;
    }
    
    # 证书信息查询接口
    location /cert-info {
        default_type application/json;
        return 200 '{
            "verify": "$ssl_client_verify",
            "subject": "$ssl_client_s_dn",
            "issuer": "$ssl_client_i_dn",
            "serial": "$ssl_client_serial"
        }';
    }
}

内容的提问来源于stack exchange,提问作者Togrul Mesimli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:42:32