weryfikacja certyfikatu klienta ssl w nginx kończy się niepowodzeniem

11

Próbuję skonfigurować uwierzytelnianie klienta SSL w Nginx. Stworzyłem samopodpisany główny urząd certyfikacji. Korzystając z tego, utworzyłem sub-CA. Użyłem tego sub-CA do stworzenia certyfikatu dla klienta. Połączyłem podrzędny urząd certyfikacji i główny urząd certyfikacji w nowy plik. Zweryfikowałem certyfikat klienta w następujący sposób:

$ openssl verify -purpose sslclient -CAfile auth-root.crt testcert.crt
testcert.crt: OK

auth-root.crt to połączony podrzędny i główny urząd certyfikacji; testcert.crt to certyfikat klienta.

Wskazałem nginx na auth-root.crt używając ssl_client_certificate.

Kiedy wykonuję żądanie HTTP przy użyciu certyfikatu testcert.crt, nginx kończy się niepowodzeniem. Włączyłem dzienniki debugowania i widzę następujące informacje:

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"
Shawn J. Goff
źródło

Odpowiedzi:

13

Należy użyć ssl_verify_depthzestawu dyrektyw co najmniej, 2ponieważ łańcuch certyfikatów wymaga dwóch przeskoków. Dla każdego podrzędnego urzędu certyfikacji między certyfikatem głównym a certyfikatami klienta należy zwiększyć tę liczbę o jeden.

Shawn J. Goff
źródło
2
Dziękujemy za udostępnienie rozwiązania. Jeśli chcesz, możesz zaznaczyć swoją odpowiedź jako poprawną.
Pothi Kalimuthu