Как создать локальный сертификат Windows на основе локального центра сертификации?
В моих попытках понять, как работают сертификаты TLS в Windows, я не нашел простого и подробного руководства, но выполнил некоторые необходимые шаги.
Во-первых, мне удалось загрузить команду OpenSSL как OpenSSL Light Stable с slproweb.com/products/Win32OpenSSL.html . Краткое описание подкоманд находится по адресу https://www.openssl.org/docs/man1.1.0/apps/. Я добавил папку bin OpenSSL в Система> Свойства> Дополнительно> Переменные среды> Системные переменные> Путь, чтобы команда "OpenSSL" работала в окне командной строки администратора.
Затем я узнал, как создать центр сертификации (ЦС) для локального использования, по адресу восхитительно вкусный сайт brabrains.com/ssl-certificate-authority-for-local-https-development/ . Это привело к сохранению созданного файла.CRT в хранилище компьютера "Доверенные корневые центры сертификации", который используется локальными браузерами при доступе к веб-страницам HTTPS. Этот новый сертификат CA можно увидеть в Консоли управления компьютером> Сертификаты (который может быть добавлен как новая оснастка MMC) или в разделе Просмотр сертификатов где-нибудь в Options в любом браузере или с помощью очень полезной команды certutil Windows.
Конкретные команды, используемые в командной строке администратора (%windir%\system32\cmd.exe) для создания локального ЦС, были следующими:
- Выберите секретную фразу-пароль и предоставьте ее, когда вас попросят.
- Создать закрытый ключ: openssl genrsa -des3 -out CA_NAME.key 2048
- Создайте сертификат PEM из личного ключа: openssl req -x509 -new -nodes -key CA_NAME.key -sha256 -days 1825 -out CA_NAME.pem
- Создайте корневой сертификат CA: openssl x509 -outform -in CA_NAME.pem -out CA_NAME.crt
- Установите корневой сертификат CA на локальном компьютере: щелкните правой кнопкой мыши CA_NAME.crt, выберите "Установить мастер импорта сертификатов сертификатов"> "Локальный компьютер"> "Обзор"> "Доверенные корневые центры сертификации".
Примечание: мне не ясно, какие из этих парольных фраз и сгенерированных файлов когда-нибудь понадобятся снова и для каких целей. Понятно, что сохраненный сертификат CA будет использоваться в качестве корневого для любых более конкретных сертификатов на текущем компьютере.
Далее я задаю вопрос, как создать сертификат авторизации сервера для одного или нескольких веб-сайтов в домене localhost (примеры: localhost/MY_WEBSITE, localhost/FOLDER/FILE.html) на основе вновь установленного доверенного сертификата CA. Это позволило бы без ошибок использовать URL-адреса браузера, такие как https://localhost/MY_WEBSITE, при условии, что локальный сервер прослушивает такие безопасные веб-запросы.
Я нашел несколько алгоритмов, но все они кажутся либо устаревшими, либо неполными. Ясно, что частью этого алгоритма должно быть создание файла "SAN", который содержит список веб-сайтов, которые будут авторизованы, а другой частью должен быть запрос на подпись сертификата (CSR).
Может ли кто-нибудь предоставить такой алгоритм, список шагов, подобный приведенному выше, для создания и установки сертификата сайта localhost на основе существующего сертификата локальной CA, созданного, как указано выше? Пожалуйста, не забудьте проверить, что вы предлагаете, прежде чем ответить.
1 ответ
OpenSSL не требует административного терминала.
... Мне не ясно, какие из этих парольных фраз и сгенерированных файлов когда-нибудь понадобятся снова и для каких целей.
- Пароль CA / ICA используется при подписании новых сертификатов, поскольку CA / ICA всегда должен иметь зашифрованный ключ
- Сертификаты сервера никогда не должны иметь зашифрованный ключ, так как он требует ручного вмешательства для запуска
- Клиентские сертификаты с зашифрованным ключом будут запрашивать пароль при каждом использовании сертификата.
... Далее я задаю вопрос, как создать сертификат авторизации сервера для одного или нескольких сайтов в домене localhost.
Это достигается с помощью профилей SAN.
- Файл openssl.cnf по умолчанию из OpenSSL довольно сложно разобрать для любого, кто не знаком с ним, поэтому несколько лет назад на моем GitHub я создал специальный, легкий для понимания openssl.cnf.
- Строка 164: начинаются профили SAN
- Строка 260: начинаются профили V3
- Строка 430: начинаются все необходимые команды и информация
... Может ли кто-нибудь предоставить такой алгоритм, список шагов, подобный приведенному выше, для создания и установки сертификата сайта localhost на основе существующего сертификата локальной CA, созданного, как указано выше?
Чтобы быть в здравом уме, я буду использовать профили V3, содержащиеся в моем связанном openssl.cnf выше
Создать необходимые каталоги:
mkdir ca\csr certs crl keys
Создать необходимые файлы:
echo 00 > crl\crlnumber && type NUL > index && type NUL > rand && echo 00 > serial
Создать 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: прописные, строчные, цифры и символы
Сгенерируйте сертификат сервера 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
Создайте и подпишите сертификат с 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
Объединить CA с Cert:
type ca/ca.crt.pem >> certs/server.crt.pem
Экспорт в PKCS12:
openssl pkcs12 -export -out certs\server.p12 -inkey certs\server.key.pem -in certs\server.crt.pem -certfile ca\ca.crt.pem
Дополнительная информация
- Индексный файл
- keyUsage & extendedKeyUsage
- Обмен ключами и обмен ключами EC
- Руководства