【发布时间】:2012-01-15 22:06:41
【问题描述】:
我正在尝试在证书已由中间 CA 签名的 nginx 中启用客户端证书身份验证。使用由自签名根 CA 签名的证书时,我能够正常工作;但是,当签名 CA 是中间 CA 时,这不起作用。
我的简单服务器部分如下所示:
server {
listen 443;
server_name _;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
ssl_client_certificate ca.pem;
ssl_verify_client on;
ssl_verify_depth 1;
location / {
root html;
index index.html index.htm;
}
}
对于 ca.pem 的内容,我尝试使用 中间 CA 并将中间 CA 证书和根 CA 证书连接起来,例如:
cp intermediate.crt ca.pem
cat root.crt >> ca.pem
当使用相同的 CA 链时,我还验证了从 openssl 的角度来看证书是有效的:
openssl verify -CAfile /etc/nginx/ca.pem certs/client.crt
certs/client.crt: OK
我已经尝试将 ssl_verify_depth 显式设置为 1(如上),然后设置为 0(不确定该数字的确切含义),但仍然出现相同的错误。
我在中间 CA 的所有变体中遇到的错误是“400 Bad Request”,更具体地说是“SSL 证书错误”(不确定这到底是什么意思)。
也许 nginx 只是不支持中间证书的证书链?非常感谢任何帮助!
【问题讨论】:
标签: authentication ssl nginx ssl-certificate