Приложение Д. Генерация сертификатов SSL

Для компонентов Dr.Web для почтовых серверов UNIX, использующих для обмена данными защищенный канал передачи данных SSL/TLS и основанные на нем прикладные протоколы, такие, как HTTPS, LDAPS, SMTPS и т. п., необходимо обеспечить наличие закрытых ключей SSL и соответствующих им сертификатов. Для некоторых компонентов ключи и сертификаты генерируются автоматически, а для других они должны быть предоставлены пользователем Dr.Web для почтовых серверов UNIX. Все компоненты используют сертификаты, представленные в формате PEM.

Для генерации закрытых ключей и сертификатов, используемых для соединений через SSL/TLS, в том числе для удостоверяющих сертификатов центра сертификации (ЦС) и для подписанных сертификатов, можно использовать утилиту командной строки openssl (входит в состав криптографического пакета OpenSSL).

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

Чтобы сгенерировать закрытый ключ SSL и сертификат

1.Для генерации закрытого ключа (алгоритм RSA, длина ключа — 2048 бит) выполните команду:

$ openssl genrsa -out keyfile.key 2048

Если требуется защитить ключ паролем, дополнительно используйте опцию -des3. Сгенерированный ключ находится в файле keyfile.key в текущем каталоге.

Для просмотра сгенерированного ключа можно использовать команду:

$ openssl rsa -noout -text -in keyfile.key

2.Для генерации сертификата на указанный срок на основании имеющегося закрытого ключа (в данном примере — на 365 суток) выполните команду:

$ openssl req -new -x509 -days 365 -key keyfile.key -out certificate.crt

Данная команда запросит данные, идентифицирующие сертифицируемый объект (такие как имя, организация и т. п.). Сгенерированный сертификат будет помещен в файл certificate.crt.

Для проверки содержимого сгенерированного сертификата можно воспользоваться командой:

$ openssl x509 -noout -text -in certificate.crt

Чтобы зарегистрировать сертификат в качестве доверенного сертификата ЦС

1.Переместите или скопируйте файл сертификата в системный каталог доверенных сертификатов (в Debian/Ubuntu — /etc/ssl/certs/).

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

3.Переиндексируйте содержимое системного каталога сертификатов.

Приведенный ниже пример выполняет все эти три действия. Предполагается, что текущим каталогом является системный каталог доверенных сертификатов /etc/ssl/certs/, а сертификат, который регистрируется в качестве доверенного, располагается в файле /home/user/ca.crt:

# cp /home/user/ca.crt ./
# ln -s ca.crt `openssl x509 -hash -noout -in ca.crt`.0
# c_rehash /etc/ssl/certs/

Чтобы создать подписанный сертификат

1.Сгенерируйте файл-запрос на подписание сертификата (Certificate Signing Request — CSR) на основании имеющегося закрытого ключа. Если ключа не имеется, сгенерируйте его.

Запрос на подписание создается командой:

$ openssl req -new -key keyfile.key -out request.csr

Эта команда, так же как и команда создания сертификата, запрашивает данные, идентифицирующие сертифицируемый объект. Здесь keyfile.key — имеющийся файл закрытого ключа. Полученный запрос будет сохранен в файл request.csr.

Для проверки результата создания запроса можно воспользоваться командой:

$ openssl req -noout -text -in request.csr

2.На основании запроса и имеющегося сертификата ЦС создать подписанный сертификат. Создание подписанного сертификата производится командой:

$ openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -set_serial 01 -in request.csr -out sigcert.crt

Для создания подписанного сертификата нужно иметь три файла: файл корневого сертификата ca.crt и его закрытый ключ ca.key (в качестве ca.crt и ca.key можно использовать сертификат certificate.crt и ключ keyfile.key, тогда полученный сертификат будет самоподписанными), а также файл запроса на подписание сертификата request.csr. Созданный подписанный сертификат будет сохранен в файл sigcert.crt.

Для проверки результата можно воспользоваться командой:

$ openssl x509 -noout -text -in sigcert.crt

Повторите процедуру создания ключа и сертификата (или подписанного сертификата, в зависимости от необходимости) столько раз, сколько уникальных сертификатов вам требуется. Например, с точки зрения соображений безопасности, каждый агент распределенной проверки файлов Dr.Web Network Checker, входящий в сканирующий кластер, должен иметь собственную пару ключ/сертификат.

Преобразование подписанного сертификата

Некоторые браузеры или почтовые клиенты могут потребовать преобразования подписанного сертификата, используемого для удостоверения личности, в формат PKCS12.

Указанное преобразование может быть выполнено командой:

# openssl pkcs12 -export -in sigcert.crt -out sigcert.pfx -inkey keyfile.key

Здесь sigcert.crt — имеющийся файл подписанного сертификата, а keyfile.key — файл соответствующего ему закрытого ключа. Полученный преобразованный сертификат будет сохранен в файл sigcert.pfx.