OpenSSL на Windows 10: Подробное руководство по PowerShell

Генерация SSL-сертификатов может быть трудной задачей, полной фрустрации и горести. Но это необязательно так! Если у вас есть Windows 10, OpenSSL и немного помощи из этого учебника, вы будете на правильном пути.

В этой статье вы узнаете, как установить OpenSSL на Windows 10. После установки вы сможете генерировать SSL-сертификаты, устранять неполадки и отлаживать сертификаты, а также конвертировать их между форматами.

Давайте начнем освоение OpenSSL на Windows 10 с помощью PowerShell!

Связано: Управление сертификатами с помощью диспетчера сертификатов Windows и PowerShell

Предварительные требования

В этой статье вы узнаете, используя практический подход. В то время как OpenSSL исторически предназначен для Linux, его можно использовать и с Windows.

Все снимки экрана в этом руководстве сделаны на Windows 10 сборка 1909 и PowerShell 7.

Установка OpenSSL на Windows 10 с помощью PowerShell и Chocolatey

предполагая, что вы установили Chocolatey, используя инструкции по установке, вашей первой задачей будет установка OpenSSL на Windows 10. Для этого откройте консоль PowerShell и выполните команду choco install OpenSSL.Light, как показано ниже.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

Вот и все! Теперь у вас установлен OpenSSL с помощью PowerShell.

Настройте рабочий каталог

В этом руководстве будут созданы несколько сертификатов для обучения. Чтобы убедиться, что все ваши действия ограничены одним каталогом, который вы можете позже очистить, создайте его.

Этот учебник будет хранить все сертификаты и связанные файлы в каталоге C:\certs. Вы можете создать папку с помощью PowerShell, выполнив следующую команду.

New-Item -ItemType Directory -Path C:\certs

Теперь пришло время настроить OpenSSL.

Настройка OpenSSL

По умолчанию OpenSSL на Windows 10 не поставляется конфигурационным файлом. Это сделано намеренно, потому что существует множество параметров конфигурации, которые вы можете настроить по своему усмотрению. В этом руководстве вы будете использовать образец конфигурации, который вы можете настроить позже, чтобы лучше соответствовать вашим требованиям безопасности.

Откройте PowerShell и выполните следующую команду. Эта команда загружает образец конфигурационного файла с MIT и сохраняет его как openssl.cnf в текущем рабочем каталоге.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

Теперь вы можете открыть файл openssl.cnf, и вы должны увидеть что-то вроде того, что показано ниже.

Sample OpenSSL configuration file

Загруженная конфигурация будет работать в текущем состоянии. Не используйте значения по умолчанию в рабочей среде!

Обновите переменные среды профиля PowerShell

Чтобы все прошло гладко, вам следует изменить ваш профиль PowerShell в Windows 10. Настройка некоторых переменных среды позволяет легко переключаться между разными версиями OpenSSL, которые могут быть установлены у вас.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

Ниже вы увидите способ создания профиля PowerShell, если у вас его еще нет. Эта команда добавляет путь к исполняемому файлу OpenSSL в вашу переменную PATH и присваивает путь к файлу конфигурации переменной OPENSSL_CONF.

# Добавить переменные среды в профиль PowerShell
# Проверить наличие профиля, если не найден - создать!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Изменить профиль, чтобы добавить эти строки
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

Чтобы использовать переменные среды, перезагрузите ваш профиль, набрав . $profile или просто закройте и снова откройте PowerShell.

Теперь вы можете легко вызывать исполняемый файл openssl откуда угодно в PowerShell, как показано ниже.

Verifying OpenSSL version in PowerShell

Использование OpenSSL в Windows 10 для генерации CSR и закрытого ключа

Перед тем, как создать SSL-сертификат, вам необходимо сгенерировать запрос на подпись сертификата (CSR) . CSR – это закодированный файл, который предоставляет вам способ обмена открытым ключом с удостоверяющим центром (CA). Этот файл содержит идентификационную информацию, алгоритм подписи и цифровую подпись. Давайте создадим ваш первый CSR и закрытый ключ.

Связано: Руководство по сертификатам X509 для смертных

Для создания CSR выполните следующую команду. OpenSSL затем предложит вам ввести некоторую идентификационную информацию, как показано в следующей демонстрации.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

После завершения у вас будет действительный CSR и закрытый ключ, которые можно использовать для выдачи вам SSL-сертификата.

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

Вы можете узнать больше о доступных параметрах CSR и просмотреть примеры конфигураций в страницах справки. У OpenSSL также есть активный репозиторий на GitHub с примерами.

Генерация пар ключей RSA

Вы также можете создавать пары ключей RSA (открытый/закрытый) с помощью OpenSSL. Для этого сначала создайте закрытый ключ с использованием подкоманды genrsa, как показано ниже.

При выполнении нижеприведенной команды OpenSSL в Windows 10 создаст RSA-ключ с длиной ключа 2048 бит. Этот ключ генерируется практически мгновенно на современном оборудовании. Полученный ключ выводится в рабочий каталог

# generate a private key using maximum key size of 2048
# key sizes can be 512, 758, 1024, 1536 or 2048. 
openssl genrsa -out rsa.private 2048

Затем сгенерируйте открытый ключ, используя только что созданный закрытый ключ с помощью подкоманды rsa. Нижеприведенный синтаксис создаст открытый ключ с именем rsa.public в рабочем каталоге из закрытого ключа rsa.private.

# generate a public key using the private key
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

Генерация самоподписанного сертификата

Иногда вам может потребоваться сгенерировать самоподписанный сертификат. Самоподписанные сертификаты подходят для использования в лабораторных условиях, но не рекомендуются для использования в рабочей среде.

Давайте создадим самоподписанный сертификат перед переходом к следующей задаче. Для этого выполните команду ниже, чтобы создать X509 SSL-сертификат. Этот сертификат будет использовать криптографию SHA256, будет действителен в течение 365 дней с использованием RSA-ключа длиной 2048 бит. Сертификат будет сохранен в рабочем каталоге.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Теперь вы готовы импортировать сертификат в браузер или сервер.

Проверка CSR, сертификатов и ключей с помощью OpenSSL

Проверка информации в CSR, закрытом ключе, сертификате или PKCS#12 может сэкономить ваше время при устранении ошибок SSL. Иногда может быть использован неправильный ключ для создания сертификата, например. У вас может быть неправильная идентификационная информация в сертификате.

Давайте начнем с проверки CSR с использованием команды req и нескольких параметров:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

Детали, такие как название страны, название организации и адрес электронной почты, указанные при создании CSR в начале этого руководства, должны точно совпадать.

Вы также можете проверить сертификат, используя подкоманду x509 с несколькими параметрами:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

Преобразование сертификатов с помощью OpenSSL

Иногда возникают ситуации, когда приложение не использует определенный формат сертификата. Такое может произойти, например, с приложением, называемым HAproxy, которое требует PEM-сертификата, когда у вас может быть сертификат в формате DER (.crt .cer .der).

Чтобы продемонстрировать преобразование сертификата, давайте преобразуем самоподписанный сертификат, созданный ранее в формат DER (certificate.crt), в PEM. Используйте код в следующем фрагменте кода для этого.

Эта команда ниже использует подкоманду x509 с параметром -inform, который должен соответствовать формату файла -in, за которым следует формат -out.

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

Вы также можете поменять порядок, если хотите преобразовать формат PEM обратно в DER, как показано ниже.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

И, наконец, вы можете преобразовать PKCS#12 в PEM и PEM в PKCS#12. Это тип файлов, который содержит закрытые ключи и сертификаты. Для преобразования в формат PEM используйте подкоманду pkcs12.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

Также вы можете преобразовать PEM-сертификат и закрытый ключ в формат PKCS#12, используя -export с несколькими дополнительными параметрами. Ниже приведен пример экспорта сертификата в формате PKCS#12 с использованием вашего закрытого ключа и SomeCertificate.crt в качестве исходного файла. Используя значение параметра -certfile MyCACert.crt, вы можете проверить сертификат SomeCertificate.crt.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

Устранение неполадок и отладка

Теперь, когда вы можете создавать и преобразовывать CSR, сертификаты и ключи, пришло время научиться их отлаживать и отлаживать. OpenSSL поставляется с командами, которые позволяют легко находить проблемы.

Кроме того, OpenSSL позволяет проверять сертификаты на целостность файла и тестировать на возможные повреждения данных. Используя контрольную сумму MD5, вы можете использовать следующие примеры кода для проверки сертификатов, ключей и CSR:

# Сертификаты
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Публичные / Закрытые ключи
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Запрос на сертификат сервера
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Проверка внешнего SSL-соединения
openssl s_client -connect www.google.com:443

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

Вот пример того, как выглядит этот код при запуске в PowerShell:

Sample troubleshooting command output with OpenSSL in PowerShell

Summary

В этой статье вы узнали, как установить и настроить OpenSSL в Windows 10, создать CSR, пару ключей и SSL-сертификат. Вы также узнали, как конвертировать между различными форматами сертификатов и выполнять базовое устранение неполадок с помощью встроенных подкоманд.

Дополнительные ресурсы

Source:
https://adamtheautomator.com/openssl-windows-10/