Вы здесь

Манипуляции с сертификатами

Для корректной работы многих сервисов в современном интернете требуется наличие сертификатов. В качестве примера можно привести HTTPS, SMTP поверх TLS, OpenVPN. В зависимости от сферы применения к сертификатам предъявляются разные требования:

Веб сервер с поддержкой SSL (HTTPS). Необходим серверный сертификат подписанный официальным удостоверяющим центром, сертификат которого есть в поставке популярных браузеров.

Почтовый сервер с поддержкой SSL (SMTP поверх TLS, POP3S, IMAPS). Для SMTP обычно достаточно самоподписанного серверного сертификата. Для POP3S, IMAPS желательно иметь официальный сертификат, поскольку почтовые клиенты (например Thunderbird) выдают предупреждения о неизвестных или некорректных сертификатах.

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

LetsEncrypt

Проект LetsEncrypt направлен на массовое внедрение HTTPS в интернете. Он предоставляет бесплатный удостоверяющий центр и наборы скриптов (для разных ОС разные), которые автоматически генерируют пару ключей, создают запрос на выпуск сертификата, отправляют его в удостоверяющий центр LetsEncrypt, а затем автоматически добавляют полученный сертификат в настройки популярных веб-серверов (Apache,Nginx, IIS).

Для почтового сервера достаточно прописать путь к файлу сертификата LetsEncrypt и использовать его совместно с веб-сервером.

EasyRSA

Вместе с OpenVPN поставляется набор скриптов easyrsa (есть под Linux и Windows), которые вызывают openssl для выполнения основных манипуляций с сертификатами. В набор скриптов входят:

  • build-ca - создать приватный ключ удостоверяющего центра (CA)
  • build-key-server - создать серверный приватный ключ и сертификат, подписанный ключом CA
  • build-dh - создать серверный ключ Диффи-Хелмана
  • build-key - создать клиентский приватный ключ и сертификат, подписанный ключом CA
  • build-key-pkcs12 - создать приватный ключ, сертификат и упаковать их вместе сертификатом CA

Версии с добавлением -pass потребуют ввода пароля для шифрования приватного ключа.

В файле openssl.cnf хранятся различные параметры openssl. Многие из них ссылаются переменные окружения, поэтому реальные настройки находятся в файле vars.sh (vars.bat).

vars.sh (фрагмент)

export KEY_SIZE=1024
export CA_EXPIRE=3650
export KEY_EXPIRE=3650

# Атрибуты сертификата
# могут быть изменены в диалоговом режиме
# при создании сертификата
export KEY_COUNTRY="RU"
export KEY_PROVINCE="EKB"
export KEY_CITY="Ekaterinburg"
export KEY_ORG="IMM"
export KEY_EMAIL=""

EasyRSA в подробностях

Внутри скриптов EasyRSA находятся вызовы openssl. Следует помнить, что часть параметров, такие как тип и размер ключа, ключ CA и т.п. находятся в файлt openssl.cnf.

Создание ключа CA без сертификата

 #запрос на сертификат сроком на 10 лет
 openssl req -days 3650 -nodes -new -x509 -keyout ca.key -out ca.csr -config openssl.cnf

Создание пары ключ-сертификат клиента

 #запрос на сертификат сроком на 10 лет
 openssl req -days 3650 -nodes -new -keyout client.key -out client.csr -config openssl.cnf
 #подпись сертификата ключом CA
 openssl ca -days 3650 -out client.crt -in client.csr -config openssl.cnf

то же для сервера

 #запрос на сертификат сроком на 10 лет
 openssl req -days 3650 -nodes -new -keyout srv.key -out srv.csr -config openssl.cnf
 #подпись сертификата ключом CA
 openssl ca -days 3650 -extensions server -in srv.csr -out srv.crt -config openssl.cnf

Экспорт в формат PKCS#12

 #запрос на сертификат сроком на 10 лет
 openssl req -days 3650 -nodes -new -keyout client.key -out client.csr -config openssl.cnf
 #подпись сертификата ключом CA
 openssl ca -days 3650 -in client.csr -out client.crt -config openssl.cnf
 # конвертация пары ключ/сертификат в файл pkcs#12.
 openssl pkcs12 -export -inkeyclient.key -in client.crt -certfile ca.crt -out client.p12
Яндекс.Метрика