Про SSL, часть вторая: получение и настройка OV сертификата

Решили мы однажды, на одном из серверов, сайт на SSL перетащить, ибо неприлично в наше время на голом http сидеть.
Сказано – сделано, купили OV сертификат (с валидацией организации), и вот что это значит.

В нашем случае (сертификат был от comodo.com), обязательными условиями было:

  1. наличие электронной почты привязанной к домену (у нас не было, т.к. доменов у нас 2, и почта как раз на втором)
  2. наличие у организации страницы на одном из справочных ресурсов http://ru.kompass.com или http://www.dnb.com
  3. возможность ответить на звонок по номеру телефона указанному на странице организации в вышеуказанном справочнике

После оплаты счета, в личном кабинете, на сайте нашего регистратора, появилась возможность выпустить сертификат, для этого необходим CSR (Certificate Signing Request), создать его можно самому (openssl), либо с помощью мастера в личном кабинете. Я выбрал openssl.

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

openssl req -new -key private.key -out domain-name.csr

данное заклинание попросит тебя ввести пароль для закрытого ключа (я его указал, но потом пришлось снимать). В моем случае, обязательными полями были:

  1. Country Name — двухсимвольный код страны согласно ISO-3166
  2. State or Province Name: название области или региона без сокращений
  3. Locality Name: название города или населенного пункта
  4. Organization Name: название организации в латинском эквиваленте
  5. Common Name: полностью определенное (FQDN) доменное имя
  6. Email Address: контактный e-mail адрес (необязательное, но я указал)
  7. A challenge password: не заполняется

В результате, были получены: закрытый ключ private.key, и CSR запрос domain-name.csr. Содержимое domain-name.csr вставил в форму в личном кабинете регистратора, и стал ждать проверку.

В подсказке в личном кабинете регистратора было сказано, что для проверки сертификата требуется почта в домене, на который выпускается сертификат. Соответственно при отправке CSR я указал ящик для каждого из сертификатов, причем для сертификата из домена mail.example.com, можно указать ящик в домене example.com.

На указанный ящик, мне прилетело письмо, вот такого содержания:

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

http://ru.kompass.com
http://www.dnb.com

К счастью, оказалось достаточно зарегистрироваться на ru.kompass.com, и указать, что являешься администраторм организации. Никаких проверок не делалось.

Следующим шагом, был проверочный звонок. В шпоргалке по выпуску сертификата от регистратора было указано, что позвонит какой-то чел, и будет разные вопросы задавать, как технического, так и административного содержания. Т.е. будет проверять, правда ли я сотрудник компании example corporation, и заказывал ли я сертификат в указанной конторе.

Оказалось все не так. Просто пришло письмо из comodo.com, со ссылкой, проследовав по которой попадаешь на страницу, где можно выбрать свой язык (на котором с тобой будут говорить), и ткнуть “call now”, при этом там указан номер телефона, который они получили из справочника организаций.

В моем случае, номер они распарсили неверно, и первой цифрой у них была 8, вместо +7, пришлось нажать “исправить номер”, и указав обоснование, ждать пока проверят. Т.к. сколько б я не тыкал “звонить”, дозвониться они не могли, ибо звонили из-за границы.

Соответственно дозвонился нам, как нетрудно догадаться – скрипт, и продиктовал 6 циферок, которые на той же странице нужно указать. Вот и вся проверка.

Сайт крутится на знаменитом дуэте nginx + apache, таким образом, сертификат прикручивался к nginx.

Из личного кабинета на сайте регистратора были скачаны:

  1. корневой сертификат root.crt
  2. два промежуточных сертификата intermediate1.crt и intermediate2.crt
  3. сертификат для домена example.com.crt

Все это хозяйство нужно собрать в один файл:

[root@example SSL_KEYS]# cat root.crt intermediate1.crt intermediate2.crt example.com.crt >> bundle.crt

и подключить к nginx, в моем случае

ssl_certificate /etc/nginx/ssl/bundle.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;

и вот тут приключились первые грабли, т.к. я делал все в точности по инструкции скачанной в техподдержке регистратора, то мысль, что что инструкция у них хреновая, пришла не сразу.
На проверку конфига “nginx -t” получал ошибку вида:

[emerg] 23348#0: PEM_read_bio_X509_AUX(“/etc/nginx/ssl/bundle.crt”) failed (SSL: error:0906D066:PEM routines:PEM_read_bio:bad end line)

как оказалось, это всего лишь, означает, что в файле bundle.crt, следует разделить строки, т.е. было:

—–END CERTIFICATE———-BEGIN CERTIFICATE—–

стало:

—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–

следующей печалью было несоответствие закрытого ключа сертификату:

[emerg] SSL_CTX_use_PrivateKey_file(“/etc/nginx/ssl/private.key”) failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

 

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

[root@example SSL_KEYS]# openssl pkey -in private.key -pubout -outform pem|md5sum
Enter pass phrase for ../private.key:
945574aa09fe008a454b75b2f148cad3 –
[root@example SSL_KEYS]# openssl x509 -in example.crt -pubkey -noout -outform pem|md5sum
945574aa09fe008a454b75b2f148cad3 –

Таким незамысловатым образом, легко сличить открытый ключ из файла private.key, и из сертификата. Если хэши совпадают, значит все ок.
данные заклинания подсмотрел вот тут: https://www.sslshopper.com/certificate-key-matcher.html

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

openssl req -in example.csr -pubkey -noout -outform pem |md5sum

ну и под конец, nginx ругнулся, что ключ с паролем, изучать мануал на предмет “где в конфигах указать пароль” я не стал, т.к. сроки поджимали, просто снял его:
снять пароль с сертификата

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

после этого все заработало.

Добавить комментарий

Войти с помощью: