Назад | Перейти на главную страницу

Проверка подлинности сертификата клиента SSL возвращает «21: невозможно проверить первый сертификат»

Я в процессе переноса некоторых из моих старых и вышедших из строя веб-серверов 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;
    }
}

Будем очень благодарны любой помощи!