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

На главную  Назад  Вперед

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

Для генерации закрытых ключей и сертификатов, используемых для соединений через SSL/TLS, в том числе – для удостоверяющих сертификатов центра сертификации (CA) и для подписанных сертификатов, можно использовать утилиту командной строки 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.Переиндексировать содержимое системного каталога сертификатов.

Приведенный ниже пример выполняет все эти три действия. Предполагается, что сертификат, который регистрируется в качестве доверенного, располагается в файле /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, а также файл запроса на подписание сертификата request.csr. Созданный подписанный сертификат будет сохранен в файл sigcert.crt.

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

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

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