Tomcat 8 + SSL

Tomcat 8 + SSL

Исходные данные:
1. Сервер с ОС Linux 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” – в файл промежуточного сертификата добавляем сертификат корневого сертификата(в конец файла)

Сonnector 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.

Обновление для Tomcat 10

Поддержка P12 в Томкат10 считается устаревшей и не будет поддерживаться в будущих версиях. Для RSA шифрования и сертификатов изменяем/добавляем секцию, ответственную за SSL соединение

<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443"
       maxThreads="150"
       SSLEnabled="true" >
       <SSLHostConfig>
           <Certificate
               certificateKeyFile="/opt/tomcat/ssl/private.key"
               certificateFile="/opt/tomcat/ssl/domain_name.crt"
               certificateChainFile="/opt/tomcat/ssl/chain.crt"
               type="RSA"
           />
       </SSLHostConfig>
   </Connector>

 

1 thought on “Tomcat 8 + SSL

Leave a Reply

Please disable your adblocker or whitelist this site!