SSL: Comodo – получение и установка подписанного SSL-сертификата, CA Root сертификата и SSL-chain

Автор: | 24/01/2014
 

ssl_logoВ примере будем использовать бесплатный SSL-сертификат от Comodo, получить его можно тут>>>.

Процедура заказа и установки платного (коммерческого) сертификата – практически та же самая, не считая деталей при оформлении заказа.

Создание Private Key сервера и .CSR – запроса на получение сертификата

Для начала – создаём сертификат, который мы будем использовать в нашем приложении:

# keytool -genkey -keysize 2048 -keyalg RSA -alias akiraCom -keystore /home/setevoy/.ssh/akiraCom.jks
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:  akira.setevoy.kiev.ua
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:  Kiev
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:  UA
Is CN=akira.setevoy.kiev.ua, OU=Unknown, O=Unknown, L=Kiev, ST=Unknown, C=UA correct?
[no]:  yes

Enter key password for <akiraCom>
(RETURN if same as keystore password):

Если после заполнения получаете подобную ошибку – попробуйте отписаться в support Comodo – вопрос решили в течении пары часов:

> An account already exists for “kiev.ua”

Потребуется регистрация – но она простая.

Продолжим. Сейчас нам необходимо создать .csr-файл – Запрос на получение сертификата (Certificate signing request). По сути он просто содержит в себе ту информацию, которую вы указали во время генерации сертификата (Private Key) сервера.

# keytool -certreq -alias akiraCom -file /home/setevoy/.ssh/akiraCom.csr -keystore /home/setevoy/.ssh/akiraCom.jks
Enter keystore password:
# ls -l | grep akiraCom
-rw-r--r--  1 root     setevoy    1023 Jan 23 14:12 akiraCom.csr
-rw-r--r--  1 root     setevoy    2222 Jan 23 14:11 akiraCom.jks
# cat akiraCom.csr
-----BEGIN NEW CERTIFICATE REQUEST-----
MIICtzCCAZ8CAQAwcjELMAkGA1UEBhMCVUExEDAOBgNVBAgTB1Vua25vd24xDTALBgNVBAcTBEtp
...
HA8oFRfKN/pZXPLpvTJKwcgI7eD/HTXEcEidFQZ6G044OKbyZ2Tr0ytxt1w3Cqq+3pbZTawROPmR
to8Rbw+AfgOE0xNQ4n4C
-----END NEW CERTIFICATE REQUEST-----

Заказ SSL-сертификата у Certificate Authority (CA)

Переходим на страницу оформления заказа на сертификат, кликаем на Большую Зелёную Кнопку Free Trial SSL, потом на такую же ещё раз – и попадаем на страницу оформления заказа.

Тут в поле 1. вставляем текст из нашего csr-файла:

csr_1

Выбираем тип подтверждения владения доменом, в данном случае – через почту в этом домене:

csr_2

Заполняем оставшиеся поля:

csr_3

Соглашаемся – ставим галочку, и кликаем Большую Синюю Кнопку:

csr_4

Открываем подсвеченное красным:

csr_5

В почте находим письмо от Comodo с номером заказа:

csr_6

В письме находим код:

csr_7

Вводим его в поле на сайте, кликаем Next:

csr_8

Всё, ждём. Сейчас письмо с сертификатами пришло буквально через 5 минут, в прошлый раз – только на следующий день.

csr_9

Так выглядит само письмо:

csr_10

Нам важно в нём следующее:

Attached to this email, you should find a .zip file containing:
Root CA Certificate - AddTrustExternalCARoot.crt
Intermediate CA Certificate - UTNAddTrustSGCCA.crt
Intermediate CA Certificate - ComodoUTNSGCCA.crt
Intermediate CA Certificate - EssentialSSLCA_2.crt
Your Free SSL Certificate - akira_setevoy_kiev_ua.crt

Это цепочка из Root, Intermediate и самого сертификата для сервера.

Можно загрузить архив с сайта https://secure.comodo.net/products/frontpage:

csr_11

Установка Root, Intermediate и подписанного сертификата сервера

Распаковываем архив в удобное место:

# unzip akira_setevoy_kiev_ua.zip
Archive:  akira_setevoy_kiev_ua.zip
extracting: AddTrustExternalCARoot.crt
extracting: UTNAddTrustSGCCA.crt
extracting: ComodoUTNSGCCA.crt
extracting: EssentialSSLCA_2.crt
extracting: akira_setevoy_kiev_ua.crt
# ls -l
total 64
-rwxr-xr-x  1 root  setevoy  1521 May 30  2000 AddTrustExternalCARoot.crt
-rwxr-xr-x  1 root  setevoy  1679 Dec  1  2006 ComodoUTNSGCCA.crt
-rwxr-xr-x  1 root  setevoy  1797 Dec  1  2006 EssentialSSLCA_2.crt
-rwxr-xr-x  1 root  setevoy  1671 Jun  7  2005 UTNAddTrustSGCCA.crt
-rwxr-xr-x  1 root  setevoy  1846 Jan 23 00:00 akira_setevoy_kiev_ua.crt
-rw-------  1 root  setevoy  9134 Jan 23 18:37 akira_setevoy_kiev_ua.zip

Теперь – разберёмся, что из этих сертификатов – Root, какие – Intermediate, т.е. “промежуточные”.

С помощью утилиты keytool посмотрим информацию о сертификате:

# keytool -printcert -file akira_setevoy_kiev_ua.crt | grep CN
Owner: CN=akira.setevoy.kiev.ua, OU=Free SSL, OU=Domain Control Validated
Issuer: CN=EssentialSSL CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

Owner – владелец, т.е. мы;
Issuer – “эмитент”, т.е. – поставщик данного сертифката.

Что бы сработал SSL Handshake – “рукопожатие”, запрос должен пройти цепочку (“chain“) от сертификата сервера – до Root-сертификата Центра Сертификации (CA - Certificate authority). Примеры выполнения SSL Handshake есть в статье SSL: установка и примеры использования утилиты ssldump.

В некоторых случаях, как в этом примере – между нашим сертифкатом и сертификатом нашего CA есть Intermediate, промежуточные, CA, и их сертификаты должны быть установлены в то же хранилище.

Просмотреть эту цепочку можно по полям Owner/Issuer сертификата. В примере выше мы видим, что и эмитент – EssentialSSL CA, а владелец – akira.setevoy.kiev.ua.

Что такое CA Root chain

Далее – найдём сертификат владельца нашего сертификата (Issuer: CN=EssentialSSL CA):

# keytool -printcert -file EssentialSSLCA_2.crt | grep CN
Owner: CN=EssentialSSL CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB
Issuer: CN=COMODO Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB

Теперь – посмотрим сертификат для COMODO Certification Authority:

# keytool -printcert -file ComodoUTNSGCCA.crt | grep CN
Owner: CN=COMODO Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB
Issuer: CN=UTN - DATACorp SGC, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US

Следующее звено цепочки – сертификат UTN - DATACorp SGC:

# keytool -printcert -file UTNAddTrustSGCCA.crt | grep CN
Owner: CN=UTN - DATACorp SGC, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US
Issuer: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE

И последний сертификат в этой цепочке:

# keytool -printcert -file AddTrustExternalCARoot.crt | grep CN
Owner: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE
Issuer: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE
[CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE]

Тут и Owner и Issuer один и тот же, т.к. этот сертифкат являетс я “корневым” (Root).

Таким образом, цепочка выглядит так:

CN=akira.setevoy.kiev.ua > CN=EssentialSSL CA > CN=COMODO Certification Authority > CN=UTN - DATACorp SGC > CN=AddTrust External CA Root.

Теперь – установим наш сертификат, в тоже хранилище, в котором лежит наш Private Key, из которого мы создавали наш .CSR файл.

Посмотрим, что в нём есть сейчас:

# keytool -list -keystore ../akiraCom.jks
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

akiracom, Jan 23, 2014, PrivateKeyEntry,
Certificate fingerprint (MD5): 3E:69:6A:32:2F:14:EA:EE:94:74:FA:0F:18:6C:B0:F2

При попытке добавить свой сертификат “вне очереди” – будет сообщено об ошибке при проверки цепочки – “Failed to establish chain from reply“:

# keytool -import -v -trustcacerts -alias akiraCom -file akira_setevoy_kiev_ua.crt -keystore ../akiraCom.jks
Enter keystore password:
keytool error: java.lang.Exception: Failed to establish chain from reply
java.lang.Exception: Failed to establish chain from reply

Добавляем в хранилище CA Root сертификат:

# keytool -import -v -trustcacerts -alias AddTrustExternalCARoot -file AddTrustExternalCARoot.crt -keystore ../akiraCom.jks
Enter keystore password:
Certificate already exists in system-wide CA keystore under alias <addtrustexternalca>
Do you still want to add it to your own keystore? [no]:  yes
Certificate was added to keystore
[Storing ../akiraCom.jks]

На вопрос "Certificate already exists in system-wide CA keystore under alias <addtrustexternalca>" – отвечаем Yes.

Проверим:

# keytool -list -keystore ../akiraCom.jks
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

akiracom, Jan 23, 2014, PrivateKeyEntry,
Certificate fingerprint (MD5): 3E:69:6A:32:2F:14:EA:EE:94:74:FA:0F:18:6C:B0:F2
addtrustexternalcaroot, Jan 24, 2014, trustedCertEntry,
Certificate fingerprint (MD5): 1D:35:54:04:85:78:B0:3F:42:42:4D:BF:20:73:0A:3F

Добавляем второй сертификат:

# keytool -import -v -trustcacerts -alias UTNAddTrustSGCCA -file UTNAddTrustSGCCA.crt -keystore ../akiraCom.jks
Enter keystore password:
Certificate was added to keystore
[Storing ../akiraCom.jks]

Третий:

# keytool -import -v -trustcacerts -alias ComodoUTNSGCCA -file ComodoUTNSGCCA.crt -keystore ../akiraCom.jks
Enter keystore password:
Certificate was added to keystore
[Storing ../akiraCom.jks]

Четвёртый:

# keytool -import -v -trustcacerts -alias EssentialSSLCA_2 -file EssentialSSLCA_2.crt -keystore ../akiraCom.jks
Enter keystore password:
Certificate was added to keystore
[Storing ../akiraCom.jks]

И только теперь – свой. Обратите внимание – alias при добавлении должен быть тем же, которым “подписан” наш Private key, в данном случае – akiraCom:

# keytool -import -v -trustcacerts -alias akiraCom -file akira_setevoy_kiev_ua.crt -keystore ../akiraCom.jks
Enter keystore password:
Certificate reply was installed in keystore
[Storing ../akiraCom.jks]

Сообщение "Certificate reply was installed in keystore" говорит о том, что вся цепочка установлена нормально.

Осталось перенастроить сервер на использование этого хранилища, настройка описана в статье Tomcat: двухфакторная авторизация пользователей по SSL-сертификатам (за исключением обратной авторизации клиент>сервер ; сервер>клиент, само собой):

keystoreFile="/home/setevoy/.ssh/akiraCom.jks"
keyAlias="akiraCom"
# service tomcat6 start
Starting tomcat60.

Проверяем:

# curl https://akira.setevoy.kiev.ua:8443/ | head
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

100  7917  100  7917    0     0  77452      0 --:--:-- --:--:-- --:--:-- 77617

И заходим на сайт браузером:

csr_12

Готово.

Есть удобные веб-сервисы для проверки SSL-chain, например – тут>>>:

csr_13