Я пытаюсь сгенерировать сертификаты для аутентификации клиента nginx с помощью этого руководства:
https://www.djouxtech.net/posts/nginx-client-certificate-authentication/
https://jason.whitehorn.us/blog/2019/02/01/client-certificate-auth-with-nginx/
Эта машина nginx работает как прокси для незащищенного сервера с некоторым api. Я сделал это год назад, и все прошло хорошо. Теперь мне нужно восстановить эти сертификаты, и я наткнулся на стену. Процесс идет хорошо, затем я беру клиентский сертификат .p12 и копирую его на машину, с которой мне нужно подключиться. Затем я тестирую его с помощью curl:
curl -k --user user:passwd --cert-type P12 --cert /path/cert.p12:passToCert https://proxy.to/connect
Учетные данные user: passwd предназначены для сервера за прокси. Сертификаты https для прокси являются самоподписанными.
Но затем я получаю сообщение об ошибке: «400 Ошибка сертификата SSL».
Когда я заглядываю в логи прокси-сервера nginx, я нахожу следующее:
2020/08/24 12:11:08 [alert] 28413#28413: *6 ignoring stale global SSL error (SSL: error:04091077:rsa routines:int_rsa_verify:wrong signature length error:0D0C5006:asn1 encoding routines:ASN1_item_verify:EVP lib) while processing HTTP/2 connection, client: 1.2.3.4, server: 0.0.0.0:443
В обоих этих руководствах я заметил, что при генерации сертификата авторизации длина ключа составляет 4096, а для клиентских сертификатов - 2048. Я попытался изменить каждую длину на 4096, затем повторил все шаги, после чего получил следующую ошибку:
2020/08/24 12:22:20 [alert] 28413#28413: *21 ignoring stale global SSL error (SSL: error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed error:0D0C5006:asn1 encoding routines:ASN1_item_verify:EVP lib) while processing HTTP/2 connection, client: 1.2.3.4, server: 0.0.0.0:443
В моем прокси-сервере nginx config a у меня есть это (первый турротик):
ssl_client_certificate /data/CA/certs/cacert.pem;
ssl_crl /data/CA/crl/ca.crl;
ssl_verify_client on;
(второй туроциал):
ssl_client_certificate /data/CA/certs/ca.crt;
ssl_crl /data/CA/private/ca.crl;
ssl_verify_client on;
В обоих руководствах у меня одинаковые результаты (они очень похожи).
Но знаю, что год назад у меня таких проблем не было, когда я делал это впервые.
Спасибо за вопросы или помощь.