具有中间证书的客户端SSL

时间:2013-12-02 06:50:12

标签: ssl nginx

我有一个自签名的根证书和一个由该根签名的中间证书。基本上是这样的:

.
└── master (CA)
    └── servant1 (CA)

我有一些客户端证书来自master->servant1证书链:

.
└── master (CA)
    └── servant1 (CA)
        ├── client1
        ├── client2
        └── client3

我想在nginx中验证这些客户端证书,我在这方面遇到了很多麻烦。

这是我的nginx配置:

upstream luci {
    server localhost:8080;
}

server {
    listen                  127.0.0.1:80;
    server_name             myserver;

    return 301 https://$host$request_uri;
}

server {
    listen                  127.0.0.1:443;
    server_name             myserver;

    ssl                     on;
    ssl_certificate         /etc/nginx/certs/myserver.crt;
    ssl_certificate_key     /etc/nginx/certs/myserver.key;

    ssl_session_timeout 5m;

    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1.2 TLSv1.1;
    ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AES:!ECDH+3DES:!DH+3DES:!RSA+3DES:!aNULL:!MD5:!DSS;

    ssl_client_certificate /etc/nginx/certs/servant1-ca-chain.crt;
    ssl_verify_client on;
    ssl_verify_depth 2;

    location / {
        proxy_pass http://luci;
    }
}

这应该非常简单。应允许中间servant1 CA签名的所有客户端证书连接到nginx。

但是,当我尝试使用这些客户端证书访问服务器时,我得到了这个:

a

(显然是一个令人难以置信的详细和有用的错误)

我在日志中找到了这个:

2013/12/01 22:46:18 [alert] 7478#0: *5 ignoring stale global SSL error (SSL: error:0407006A:lib(4):func(112):reason(106) error:04067072:lib(4):func(103):reason(114) error:0D0C5006:lib(13):func(197):reason(6)) while reading client request line, client: 192.168.1.208, server: myserver

这里有用的信息是:

  

忽略陈旧的全局SSL错误

出了什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

我使用OpenSSL生成了我的证书,并且很可能在整个过程中搞砸了一些东西。

我的建议是尽可能使用XCA来生成SSL证书,因为它非常安全,功能齐全,并且可以轻松管理公钥和私钥,证书,CSR等。