Я в процессе переноса некоторых из моих старых и вышедших из строя веб-серверов apache2 на более новые и более устойчивые контейнеры nginx.
На моем старом веб-сервере у меня есть сервер apache2, на котором secretbackdoor.example.com
, который аутентифицирует «пользователей» (только меня) с помощью подписанного сертификата. ЦС настраивается следующим образом:
> ROOT CA (self-signed, obviously)
|--> Intermediate CA (Signed by ROOT CA)
|--> Client Certificate (Signed by Intermediate CA)
Этот вопрос о переполнении стека показал, что я не могу выполнить прямую промежуточную проверку CA. Кроме того: технически я согласен с тем, что nginx - это правильно, но на практике полезно иметь сертификаты, привязанные к конкретному промежуточному ЦС ... Я отвлекся.
При этом я выполнил инструкции по этому вопросу, но наткнулся на стену. Я установил ssl_client_certificate
быть сертификатом CA. Когда я пытаюсь подключиться к своему браузеру, у которого есть сертификат клиента, я получаю следующую ошибку в моем error.log
файл:
client SSL certificate verify error: (21:unable to verify the first certificate) while reading client request headers, client: 1.1.1.1, server: secretbackdoor.example.com, request: "GET / HTTP/2.0", host: "secretbackdoor.example.com"
Я пробовал использовать промежуточный ЦС в дополнение к настройке ssl_client_certificate
к прикованным сертификатам безрезультатно.
Я запускаю nginx, используя докер с сертификатами letsencrypt, защищающими трафик. Я не уверен, что это вызывает проблемы, но подумал, что это не должно быть проблемой, поскольку клиентские сертификаты могут и часто подписываются разными центрами сертификации.
Вот настройка моего сайта:
server {
listen 443;
server_name secretbackdoor.example.com;
ssl_certificate /etc/letsencrypt/live/secretbackdoor.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/secretbackdoor.example.com/privkey.pem;
ssl_client_certificate /etc/nginx/conf.d/certs/root_ca.pem;
ssl_verify_client on;
ssl_verify_depth 2;
# https://github.com/certbot/certbot/blob/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf
include /etc/letsencrypt/options-ssl-nginx.conf;
# https://github.com/certbot/certbot/blob/master/certbot/certbot/ssl-dhparams.pem
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Будем очень благодарны любой помощи!