Как правильно создать самоподписанные сертификаты для использования в Nginx

Я использовал openssl для создания следующих сертификатов:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -subj "/C=IT/ST=Mi/L=Milan/O=MyOrg/OU=RnD/CN=localhost/emailAddress=info@myorg.com"
openssl rsa -in server.key -out server.insicure.key
cat server.insicure.key > certificate.pem
cat server.crt >> certificate.pem

Затем я установил nginx для защиты сайта от клиента:

server {
    listen 80 ssl;
    root /var/www/site;

    index index.html;

    ssl_certificate         /root/server.crt;
    ssl_certificate_key     /root/server.key;

    ssl_client_certificate  /root/certificate.pem;

    ssl_verify_client on;
    ssl_verify_depth 2;

     location / {
            try_files $uri $uri/ =404;
    }
}

Однако, когда я пытаюсь получить сайт с помощью curl, он работает не так, как ожидалось:

curl --cacert certificate.pem https://localhost:80

и я получаю следующую страницу с ошибкой от nginx:

<html>
<head><title>400 No required SSL certificate was sent</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.14.0 (Ubuntu)</center>
</body>
</html>

Все, что я Делаете что-то не так? Спасибо

1
задан 28 November 2019 в 11:48
1 ответ

Вы даете Nginx команду запрашивать клиентский сертификат с:

ssl_verify_client on;
ssl_verify_depth 2;

Однако Вы не сказали curl использовать один (--cacert, только говорит curl, где сертификат CA для использования для проверки сертификата сервера расположен). Nginx поэтому правильно говорит Вам, что Вы не отправили клиентский сертификат.

, Если Вы только хотите, чтобы сервер отправил сертификат TLS, для получения HTTPS, работающего затем просто, комментируют или удаляют эти две строки выше.

, Если Вы действительно хотите, чтобы клиент отправил сертификат, затем необходимо создать CA и использовать его для издания клиентского сертификата. Дайте клиентский сертификат и закрытый ключ к curl (использование --cert и --key соответственно) и настройте сертификат CA в Nginx с ssl_client_certificate (без закрытого ключа!!).

Этот вопрос/ответ шоу, как создать клиентское использование сертификата OpenSSL.

1
ответ дан 3 December 2019 в 22:58

Теги

Похожие вопросы