我有一个自签名根证书和一个由该根签名的中间证书。基本上是这样的:
.
└── 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。
但是,当我尝试使用这些客户端证书访问服务器时,我得到了:
(显然是一个非常详细和有用的错误)
我在我的日志中找到了这个:
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
这里的有用信息是:
ignoring stale global SSL error
出了什么问题,我该如何解决?
最佳答案
我使用 OpenSSL 生成了我的证书,很可能在这个过程中搞砸了。
我的建议是使用 XCA在所有可能的情况下生成 SSL 证书,因为它非常安全、功能齐全,并且可以轻松管理公钥和私钥、证书、CSR 等。
关于ssl - 带有中间证书的客户端 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20322399/