В примере будем использовать бесплатный 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
-файла:
Выбираем тип подтверждения владения доменом, в данном случае – через почту в этом домене:
Заполняем оставшиеся поля:
Соглашаемся – ставим галочку, и кликаем Большую Синюю Кнопку:
Открываем подсвеченное красным:
В почте находим письмо от Comodo с номером заказа:
В письме находим код:
Вводим его в поле на сайте, кликаем Next:
Всё, ждём. Сейчас письмо с сертификатами пришло буквально через 5 минут, в прошлый раз – только на следующий день.
Так выглядит само письмо:
Нам важно в нём следующее:
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:
Установка 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
И заходим на сайт браузером:
Готово.
Есть удобные веб-сервисы для проверки SSL-chain
, например – тут>>>: