【问题标题】:nginx ssl_trusted_certificate directive not workingnginx ssl_trusted_certificate 指令不起作用
【发布时间】:2018-09-27 20:25:48
【问题描述】:

当我尝试使用此配置启动 nginx 服务器时出现错误

nginx: [emerg] no ssl_client_certificate for ssl_client_verify

我的配置看起来像

# HTTPS server
server {
    listen       4443;
    server_name  localhost;
    ssl                  on;
    ssl_certificate      /home/user/conf/ssl/server.pem;
    ssl_certificate_key  /home/user/conf/ssl/server.pem;
    ssl_protocols        TLSv1.2;

    ssl_verify_client optional;
    ssl_trusted_certificate /home/user/ssl/certs/certificate_bundle.pem;

    include conf.d/api_proxy.conf;
}

根据错误,我应该使用ssl_client_certificate 指令,但根据文档,如果我不想将证书列表发送给客户,我应该使用ssl_trusted_certificate。

http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

谁能帮我弄清楚我错过了什么?

【问题讨论】:

    标签: nginx nginx-location nginx-reverse-proxy nginx-status


    【解决方案1】:

    答案就在错误信息中:

    nginx: [emerg] no ssl_client_certificate for ssl_client_verify
    

    如果你在配置中禁用ssl_client_verify,下次启动nginx时错误会消失。看来ssl_trusted_certificate 的语义只适用于它的独占使用,并且在其他配置指令起作用时受制于“逻辑覆盖”。

    我个人个人更喜欢启用ssl_client_verify 来表示:“客户端证书在提供时进行验证;客户端不会获得有关 Web 服务器信任哪些客户端证书或权限的信息”。但是,当此信息可用时,我还可以看到排除 TLS 握手问题的优势。从安全角度来看,我只看到通过openssl s_client 呈现给客户端的元数据;没有恶意客户端可以用来尝试克隆/重建 CA 的公钥或其他“签名关键”信息。

    例如,使用您的配置对本地 nginx 实例运行以下命令:

    openssl s_client -key client.key -cert client.crt -connect localhost:443

    ... 将在响应中显示与以下结构相似的数据:

    Acceptable client certificate CA names
    /CN=user/OU=Clients/O=Company/C=Location
    Client Certificate Types: RSA sign, DSA sign, ECDSA sign
    Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
    Shared Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
    Peer signing digest: SHA512
    Server Temp Key: ECDH, P-256, 256 bits
    

    在我看来,以上的价值仅限于故障排除。

    您的 DN 结构(理想情况下)与“安全相关”无关(尤其是当上下文是面向 Internet 的 Web 服务时)。

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2017-12-06
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多