Tomcat 8 + SSL

Исходные данные:
1. Сервер с ОС Debian. В нашем случае это x64 с 8 версией.
2. Apache Tomcat 8
3. 4 сертификата, подписанные удостоверяющим центром:
ca.pem — корневой сертификат,
chain.crt — промежуточный сертификат,
private.key — приватный ключ,
domain_name.crt — собственно сам сертификат домена

Переходим к работе:
Вариант 1.
1. Добавляем пароль к приватному ключу private.key, если он Вами был получен в текстовом виде.

 
      openssl rsa -des3 -in private.key -out private_encrypted.key

после вводим пароль и сохраняем в надежном месте,т.к. утеря пароля приведет Вас к необходимости перевыпуска ssl сертификата.
2. Проводим импорт сертификатов для будущего хранилища:

 
    openssl pkcs12 -export -in domain_name.crt -inkey private_encrypted.key -out keystore.p12 -name it-notepad.com -CAfile ca.pem -caname root

Здесь все довольно понятно, разве что поясним — myhostname, это имя хоста, для которого выпущен ssl сертификат, а также не забываем указать приватный ключ именно тот, который защищен паролем(private_encrypted.key). После отображения приглашения создания пароля, вводим пароль, такой же, как у приватного ключа, иначе по окончании всей работы получим в логах Tomcat Caused by: java.io.IOException: Cannot recover key.
3. Создаем само хранилище

 
     keytool -importkeystore -deststorepass <пароль хранилища keystore> -destkeystore keystore.kdb -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass <пароль защиты от импорта> -alias aliasname

4. Добавляем в хранилище промежуточный/промежуточные сертификаты

 
    keytool -import -trustcacerts -alias chainalias -file chain.crt -keystore keystore.kdb

В заключение добавляем коннектор в конфигурационный файл Apache Tomcat — server.xml

 
     <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       clientAuth="false" sslProtocol="TLS"
       keystoreFile="/etc/tomcat8/ssl/keystore.kdb"
       keystorePass="your_keystore_pass"
       keyAlias="Your_alias"/>

и не забываем в самом начале файла server.xml в разделе с перечислением директив Listener, проверить, имеется ли следующая запись и в случае ее отсутствия добавить:

 
     <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /

Вариант 2.

 
openssl pkcs12 -export -in domain_name.crt -inkey private.key -out mycert.p12 -name tomcat -CAfile chain.crt -caname root -chain

Если появляется ошибка: «Error unable to get issuer certificate getting chain» — в файл промежуточного сертификата добавляем сертификат корневого сертификата(в конец файла)

 
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
  maxThreads="150" scheme="https" secure="true"
  clientAuth="false" sslProtocol="TLS"
  keystoreType="PKCS12"
  keystoreFile="/opt/tomcat8/ssl/mycert.p12"
  keystorePass="your_keystore_pass"/>

Возможные ошибки:

keytool error: java.lang.Exception: Public keys in reply and keystore don’t match — проверьте файлы сертификатов, если Вы их создавали в ОС Windows — могут быть артефакты в текстовых файлах — символы перевода строк. В этом случае необходимо создать заново файлы сертификатов. Вторая проблема — в том, что вы пытаетесь добавить промежуточный сертификатом с имеющимся уже alias’ом в keystore.

1 thought on “Tomcat 8 + SSL

Leave a Reply

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.