我正在尝试在nginx中设置SSL客户端身份validation。 我创build了一个自签名的根CA. 使用这个,我创build了一个子CA。 我使用这个子CA为客户端创build一个证书。 我将子CA和根CA连接成一个新文件。 我validation了客户端证书如下:
$ openssl verify -purpose sslclient -CAfile auth-root.crt testcert.crt testcert.crt: OK
auth-root.crt是级联的子级和根级CA; testcert.crt是客户端证书。
我使用ssl_client_certificate将nginx指向auth- ssl_client_certificate 。
当我使用testcert.crt证书发出HTTP请求时,nginx失败。 我打开debugging日志,可以看到以下内容:
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"
您需要使用ssl_verify_depth指令设置为至less2因为证书链需要两跳。 对于根证书和客户端证书之间的每个其他子CA,您需要将该数字加1。