воскресенье, 22 ноября 2009 г.

Создать сертификаты для включения SSL на tomcat

Подготовка сертификатов для включения SSL на веб-сервере


Несколько вариантов создания и подключения сертификатов для tomcat.
В данном статье в качестве веб-сервера используется tomcat и утилита keytool. 
Keytool позволяет создавать и управлять java keystore, специальным хранилищем ключей и сертификатов. Сертификаты для tomcat обычно храняться в нем. У Java Keystore есть алиас - имя по которому можно запросить информацию о сертификатах и пароли.


Первый способ - Самоподписанный сертификат.
Сертификат подписан самим собой, в основном используется для тестов. В реальной жизни мало применим, потому что при входе на сайт, пользователь видит предупреждение о том, что сертификат является не доверенным.
Чтобы создать такой сертификат нужно запустить команду:
 keytool -genkey -alias mykeystore -keyalg RSA  
Затем будет задан вопрос "What is your first and last name", естественно нужно ввести полное DNS имя сервера. Создастся keystore с сертификатом. Осталось настроить tomcat на него.


Второй способ - Thawte сертификат
Данный способ предполагает, что уже приобретен thawte wildcard сертификат и нужно его подготовить и подключить к tomcat.
В документации на сайте thawte описывается способ импорта сертификата в keystore вебсервера tomcat. Но в нашем случае данный keystore не заработает, так как не был импортирован приватный ключ и tomcat выдаст ошибку:
java.io.IOException: Alias name tomcat does not identify a key entry
Ребята из comu.de написали утилиту позволяющую импортировать сертификат и приватный ключ в keystore. Ссылка на источник (http://www.comu.de/docs/tomcat_ssl.htm)
Скачать утилиту ImportKey.java и положить в /usr/local/ssl/comu/
Запустить компиляцию проекта:
 javac ImportKey.java  
В каталоге /usr/local/ssl/comu появиться файл ImportKey.class
Положить thawte сертификат и приватный ключ в каталог /usr/local/ssl
Все сертификаты должны быть сохранены в DER-format, а так же приватный ключ зашифрован в pksc8, а сертификат в x509.
Конвертация приватного ключа:
 openssl pkcs8 -topk8 -nocrypt -in YOUR.KEY -out YOUR.KEY.der -outform der  
Запустить java утилиту Importkey.java на создание keystore:
 java comu.ImportKey YOUR.KEY.der YOUR.CERT.der  
Будет создан файл $home/keystore.ImportKey, где $home это домашняя директория пользователя, в моем случае это /root/keystore.ImportKey. Файл нужно переместить в /usr/local/ssl
Содержание полученного keystore можно посмотреть следующей командой:
 keytool -list -keystore keystore.ImportKey  
Но этого недостаточно, так как утилита оставила пустые пароли, нам необходимо их создать, один на keystore(storepass), второй на ключ (keypass).
Создание пароля для keystore:
 keytool -storepasswd -alias importkey -keystore /usr/local/ssl/keystore.ImportKey -storepass ""  
Создание пароля ключа (попросит ввести предыдущий пароль для keystore):
 keytool -keypasswd -alias importkey -keystore /usr/local/ssl/keystore.ImportKey -keypass ""  
Если нужно изменить название keystore, то это делается так:
 keytool -keyclone -keystore keystore.ImportKey -alias importkey -keypass <пароль ключа> -dest <новый keystore>  
Осталось добавить пути к сертификатам в конфигурацию tomcat


Третий способ - Сертификат созданный в Microsoft Active Directory Certificate Service
Данный способ предполагает запрос необходимых сертификатов через доменный центр сертификации, выгрузку их в формате pfx и подключение к веб серверу.
Третий способ решил вынести в отдельный пост, так как слишком объемная статья получилась.