Как создать сертификат localhost для Windows на основе локального CA?

Вопрос или проблема

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

Во-первых, мне удалось скачать команду OpenSSL в виде OpenSSL Light Stable с сайта slproweb.com/products/Win32OpenSSL.html. Краткие описания подкоманд можно найти на https://www.openssl.org/docs/man1.1.0/apps/. Я добавил папку OpenSSL bin в Система > Свойства > Расширенные параметры > Переменные среды > Системные переменные > Path, чтобы команда “OpenSSL” работала в окне командной строки администратора.

Затем я узнал, как создать Центр сертификации (CA) для локального использования на deliciousbrains.com/ssl-certificate-authority-for-local-https-development/. Это привело к сохранению созданного .CRT файла в хранилище машины “Доверенные корневые центры сертификации”, которое используется локальными браузерами при доступе к HTTPS веб-страницам. Новый сертификат CA можно увидеть в Консоли управления компьютером > Сертификаты (который, возможно, нужно будет добавить в качестве нового узла MMC) или в Опции сертификатов в любом браузере, или с использованием очень полезной команды Windows certutil.

Конкретные команды, использованные в окне командной строки администратора (%windir%\system32\cmd.exe) для создания локального CA, были:

  1. Выберите секретную фразу и предоставьте ее по мере запроса.
  2. Сгенерируйте закрытый ключ:
    openssl genrsa -des3 -out CA_NAME.key 2048
  3. Сгенерируйте PEM сертификат из закрытого ключа:
    openssl req -x509 -new -nodes -key CA_NAME.key -sha256 -days 1825 -out CA_NAME.pem
  4. Создайте корневой сертификат CA:
    openssl x509 -outform der -in CA_NAME.pem -out CA_NAME.crt
  5. Установите корневой сертификат CA на локальном компьютере:
    Щелкните правой кнопкой мыши на CA_NAME.crt, выберите Установить сертификат
    Мастер импорта сертификатов > Локальная машина > Обзор… > Доверенные корневые центры сертификации

Примечание: мне неясно, какие из этих фраз и сгенерированных файлов когда-либо понадобятся снова и для каких целей. Очевидно, что сохраненный сертификат CA будет использоваться в качестве корневого для любых дальнейших более специфических сертификатов на текущем компьютере.

Следующий вопрос, который я задаю здесь, это как создать сертификат авторизации сервера для одного или нескольких веб-сайтов в домене localhost (например: localhost/MY_WEBSITE, localhost/FOLDER/FILE.html) на основе недавно установленного доверенного сертификата CA. Это позволит использовать такие URL-адреса в браузере, как https://localhost/MY_WEBSITE без ошибок, при условии, что локальный сервер слушает такие безопасные веб-запросы.

Я нашел несколько алгоритмов, но они все кажутся устаревшими или неполными. Очевидно, что частью этого алгоритма должно быть создание файла “SAN”, который содержит список веб-сайтов, которые будут авторизованы, и что другой частью должен быть Запрос на подпись сертификата (CSR).

Может ли кто-нибудь предоставить такой алгоритм, список шагов, как в списке выше, для создания и установки сертификата для веб-сайта localhost на основе существующего локального сертификата CA, созданного как выше? Пожалуйста, убедитесь, что вы протестировали то, что вы предлагаете, перед ответом.

OpenSSL не требует административного терминала.

…Мне неясно, какие из этих фраз и сгенерированных файлов когда-либо понадобятся снова и для каких целей.

  • Фраза CA / ICA используется всякий раз, когда подписываются новые сертификаты, так как CA / ICA всегда должен иметь зашифрованный ключ
  • Сертификаты сервера никогда не должны иметь зашифрованный ключ, так как это требует ручного вмешательства для запуска
  • Клиентские сертификаты с зашифрованным ключом будут запрашивать фразу каждый раз, когда сертификат используется.

…Следующий вопрос, который я задаю здесь, это как создать сертификат авторизации сервера для одного или нескольких веб-сайтов в домене localhost

Это достигается через профили SAN.

  • Стандартный openssl.cnf от OpenSSL довольно трудно разобрать для неподготовленных, поэтому я создал настраиваемый, легко понимаемый openssl.cnf несколько лет назад на моем GitHub
    • Строка 164: Профили SAN начинаются
    • Строка 260: Профили V3 начинаются
    • Строка 430: Все необходимые команды и информация начинаются

…Может ли кто-нибудь предоставить такой алгоритм, список шагов, как в списке выше, для создания и установки сертификата веб-сайта localhost на основе существующего локального сертификата CA, созданного как выше?

Чтобы сохранить все в порядке, я буду использовать профили V3, содержащиеся в моем связующемся openssl.cnf выше

  1. Создайте необходимые директории:

    mkdir ca\csr certs crl keys
    
  2. Создайте необходимые файлы:

    echo 00 > crl\crlnumber && type NUL > index && type NUL > rand && echo 00 > serial
    
  3. Создайте CA

    openssl req -x509 -new -sha512 -days 3650 -newkey rsa:4096 -keyout ca\ca.key.pem -out ca\ca.crt.pem -config .\openssl.cnf -extensions v3_ca
    
    • Пароли ключа CA: минимум 20 символов, содержащие 2: заглавные буквы, строчные буквы, цифры и символы

      1. Сгенерируйте CSR для сертификата сервера:

        openssl req -out ca\csr\server.csr -new -days 3650 -sha512 -newkey rsa:2048 -keyout keys\server.key.pem -config .\openssl.cnf -extensions v3_sophos -nodes
        
      2. Создайте и подпишите сертификат с CA:

        openssl x509 -req -sha512 -days 3650 -in ca\csr\server.csr -CA ca\ca.crt.pem -CAkey ca\ca.key.pem -CAserial .\serial -out certs\server.crt.pem -extfile .\openssl.cnf -extensions v3_sophos
        
      3. Объедините CA с сертификатом:

        type ca/ca.crt.pem >> certs/server.crt.pem
        
      4. Экспорт в PKCS12:

        openssl pkcs12 -export -out certs\server.p12 -inkey certs\server.key.pem -in certs\server.crt.pem -certfile ca\ca.crt.pem
        

Дополнительная информация

Ответ или решение

Создание сертификата localhost на основании локального сертификата CA в Windows может показаться сложной задачей, но с помощью OpenSSL и нескольких простых шагов это можно сделать достаточно быстро и эффективно. В этом руководстве мы рассмотрим, как сгенерировать сертификат для сервера, который будет использоваться для безопасного соединения (HTTPS) на вашем локальном сервере.

Шаги по созданию сертификата для localhost на основе локального CA

1. Подготовка окружения

Прежде всего, убедитесь, что вы установили OpenSSL и добавили путь к его bin каталогу в системные переменные PATH, как вы уже сделали. Убедитесь, что ваши директории для работы с сертификатами созданы.

   mkdir ca\csr certs crl keys
   echo 00 >> crl\crlnumber && type NUL >> index && type NUL >> rand && echo 00 >> serial

2. Создание Certificate Authority (CA)

Если вы уже создали локальный CA, этот шаг можно пропустить. Тем не менее, вот команда для его создания, если вам нужно:

   openssl req -x509 -new -sha512 -days 3650 -newkey rsa:4096 -keyout ca\ca.key.pem -out ca\ca.crt.pem -config .\openssl.cnf -extensions v3_ca

3. Генерация запроса на сертификат (CSR) для сервера

Далее создадим запрос на сертификат для вашего локального сервера. Важно использовать расширение SAN (Subject Alternative Name), чтобы указать, от каких доменов или адресов будет действителен сертификат.

Создайте свой собственный openssl.cnf файл, при этом убедитесь, что у вас есть секция для SAN. Пример файла конфигурации можно найти по этой ссылке.

Чтобы создать CSR, выполните следующую команду:

   openssl req -out ca\csr\server.csr -new -days 3650 -sha512 -newkey rsa:2048 -keyout keys\server.key.pem -config .\openssl.cnf -extensions v3_sophos -nodes

4. Создание и подписка сертификата с помощью CA

Теперь, когда у вас есть CSR, мы можем создать и подписать сертификат:

   openssl x509 -req -sha512 -days 3650 -in ca\csr\server.csr -CA ca\ca.crt.pem -CAkey ca\ca.key.pem -CAserial .\serial -out certs\server.crt.pem -extfile .\openssl.cnf -extensions v3_sophos

5. Конкатенация CA к сертификату

Объедините ваш созданный сертификат с корневым сертификатом CA:

   type ca\ca.crt.pem >> certs\server.crt.pem

6. Экспорт в PKCS12 формат

Завершите процесс, экспортировав сертификат в формат PKCS12, который можно использовать в различных приложениях:

   openssl pkcs12 -export -out certs\server.p12 -inkey keys\server.key.pem -in certs\server.crt.pem -certfile ca\ca.crt.pem

Установка сертификата

  1. Импортируйте серверный сертификат в Windows:

    • Дважды щелкните файл server.crt.pem, выберите "Установить сертификат".
    • Выберите "Локальный компьютер", затем "Доверенные корневые центры сертификации", а затем нажмите "Готово".
  2. Настройка веб-сервера:
    Убедитесь, что ваш локальный сервер (например, Apache, Nginx или IIS) настроен для использования созданного сертификата.

Заключение

Теперь вы можете безопасно использовать HTTPS на вашем локальном сервере. Если все шаги выполнены правильно, вы сможете получать доступ к вашему сайту по адресу https://localhost/MY_WEBSITE без ошибок, связанных с сертификатами. Надеюсь, данное руководство было полезным, и у вас не возникнет трудностей с выполнением данных шагов.

Оцените материал
Добавить комментарий

Капча загружается...