我有一个自签名的根证书和一个由该根签名的中间证书。基本上是这样的:
.
└── 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
这里有用的信息是:
忽略陈旧的全局SSL错误
出了什么问题,我该如何解决?
答案 0 :(得分:0)
我使用OpenSSL生成了我的证书,并且很可能在整个过程中搞砸了一些东西。
我的建议是尽可能使用XCA来生成SSL证书,因为它非常安全,功能齐全,并且可以轻松管理公钥和私钥,证书,CSR等。