我正在尝试在 nginx 中设置 SSL 客户端身份验证。我创建了一个自签名根 CA。使用它,我创建了一个子 CA。我使用这个子 CA 为客户端创建证书。我将子 CA 和根 CA 连接到一个新文件中。我按如下方式验证了客户端证书:
$ openssl verify -purpose sslclient -CAfile auth-root.crt testcert.crt
testcert.crt: OK
auth-root.crt 是连接的子 CA 和根 CA;testcert.crt 是客户端证书。
我使用 将 nginx 指向 auth-root.crt ssl_client_certificate
。
当我使用 testcert.crt 证书发出 HTTP 请求时,nginx 失败。我打开了调试日志,可以看到以下内容:
2012/06/21 22:58:47 [debug] 8901#0: *2 verify:0, error:2, depth:1, subject:"/C=US/ST=Florida/L=Tampa/O=Test org/OU=Test OU/CN=AuthCerts TestCA",issuer: "/C=US/ST=Florida/L=tampa/O=Test org/OU=Test OU/CN=Root TestCA"
2012/06/21 22:58:47 [debug] 8901#0: *2 verify:0, error:27, depth:1, subject:"/C=US/ST=Florida/L=Tampa/O=Test org/OU=Test OU/CN=AuthCerts TestCA",issuer: "/C=US/ST=Florida/L=tampa/O=Test org/OU=Test OU/CN=Root TestCA"
2012/06/21 22:58:47 [debug] 8901#0: *2 verify:1, error:27, depth:0, subject:"/C=US/ST=Florida/L=Tampa/O=Accelerated Concepts/OU=NetBridge/CN=030202",issuer: "/C=US/ST=Florida/L=Tampa/O=Test org/OU=Test OU/CN=AuthCerts TestCA"
答案1
您需要使用ssl_verify_depth
设置为至少的指令,2
因为您的证书链需要两跳。对于根证书和客户端证书之间的每个其他子 CA,您需要将该数字增加一。