Notes Vulgaris

Links
Типографская раскладка
ЖеЖе
Жизненный цикл Серебряной Пули
Account
Tags
Создаём собственный CA и подписываем им сертификаты для своих ресурсов
2010-02-16 22:36 | tags: security, kb, howto

В этой заметке в деталях описывается процесс создания собственного Центра сертификации и последующая генерация сопутствующих файлов: сертификатов, запросов на сертификат и так далее. Считаем, что работаем в терминале на линукс/юникс машине с установленным openssl.

Заметка является вольным переложением на русский язык вот этой статьи.

Коротко о главном

Центр сертификации (по-английский Certification authority, сокращённо CA) — это единый центр генерации цифровых сертификатов. Конечные клиенты имеют публичный ключ и при помощи этого ключа проверяют выписанные CA сертификаты. Нас интересуют сертификаты, используемые в сеансах, защищённых протоколом SSL/TLS.

Собственно, всю процедуру можно разбить на такие шаги:

  1. генерим приватный ключ (сильно случайный набор байтов);
  2. генерим на основе приватного ключа пару сертификатов для CA (публичный и приватный);
  3. генерим пару сертификатов

Создаём CA

Для начала сгенерим приватный ключ (файл ca.key), в процессе вводим пароль (запоминаем его, нам он дальше понадобится):

$ openssl genrsa -des3 -out ca.key 4096

Теперь сгенерим пару сертификатов для нашего CA (вместо 365 можно подставить любое другое значение, это срок годности пары сертификатов):

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

Вводим пароль к ключу и затем аккуратно заполняем поля. По этим данным можно будет потом идентифицировать публичный сертификат среди списка других, например. На выходе получаем файл ca.crt — это публичный сертификат нашего CA.

Создаём пару сертификатов для домена

Итак, у нас есть некий домен (к примеру, regolit.com) и мы хотим выписать для него SSL-сертификат, подписанный только что созданным CA. Шаги примерно такие же, как и в случае создания CA: создаём приватный ключ (это ключ для нашего домена/сервера, не путайте его с ключом CA, для гарантии можно даже проделывать шаги по созданию CA в отдельном каталоге).

Итак, генерим ключ (вводим пароль, желательно другой, отличный от пароля, использованного для генерации ключа CA):

$ openssl genrsa -des3 -out server.key 4096

Приватный ключ хранится на стороне владельца сервера и не должен никогда никому отдаваться. Как же тогда CA сможет подписать сертификат? Очень просто, на основании ключа server.key генерится так называемый запрос на подпись сертификата (по-английски certificate signing request (csr)):

$ openssl req -new -key server.key -out server.csr

Очень важно корректно заполнить запрашиваемую информацию, конкретно имя домена, для которого выписывается сертификат, нужно указать в параметре Common name, примерно вот так:

Common Name (eg, YOUR name) []:regolit.com

Полученный файл server.csr теперь нужно «отправить» CA, чтобы там его подписали. Поскольку CA наш собственный, то прямо сейчас же и подпишем:

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

В данном случае «срок годности» сертификата устанавливаем в 365 дней.

Теперь у нас есть практически полный комплект всех нужных сертификатов. Для сервера нужно только «вытащить» незашифрованный серверный ключ (в файл server.key.insecure):

$ openssl rsa -in server.key -out server.key.insecure

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

$ mv server.key server.key.secure
$ mv server.key.insecure server.key

Используем сертификаты

Для начала полезные команды, которые позволяет «посмотреть» сертификаты:

$ openssl rsa -noout -text -in server.key
$ openssl req -noout -text -in server.csr
$ openssl rsa -noout -text -in ca.key
$ openssl x509 -noout -text -in ca.crt

Теперь нужно положить сгенерированные сертификаты (server.crt и server.key) в нужное место на сервере. Конкретные детали уже выходят за рамки заметки.

Чтобы браузер не ругался на сертификат, нужно добавить в его репозиторий CA только что созданный CA, а именно файл ca.crt, импортируем, смотрим, что в списке он появился. Также можно сертификат положить в общесистемный репозиторий CA-сертификатов.

Comments

post new comment