пятница, 1 апреля 2016 г.

Установка SSL-сертификата на Apache Tomcat

Имеем:
# ls /root -1
intermidiate.ca  - промежуточный сертификат
root.ca  - корневой сертификат
domain.crt  - сертификат домена
domain.key - ключ

Нужно для сайта установить SSL-сертификат, на порт по умолчанию (443).

Создаем цепочку сертификатов и создаем файл в формате pkcs12:
# cat inter.ca root.ca > domain.ca
# openssl pkcs12 -export -in domain.crt -inkey domain.key -out keystore.p12 -name domain -CAfile domain.ca -caname root
Enter Export Password: 123456
Verifying - Enter Export Password: 123456

Создаем хранилище ключей и импортируем сертификат:
# cp keystore.p12 /etc/tomcat7/
# cd /etc/tomcat7/
# keytool -importkeystore -deststorepass 123456 -destkeystore keystore.kdb -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass 123456
Entry for alias sert successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

Добавляем промежуточный сертификат:
# keytool -import -trustcacerts -alias intermediate -file /root/intermediate.ca -keystore keystore.kdb
# keytool -list -keystore keystore.kdb
Enter keystore password:  123456

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

domain, Apr 1, 2016, PrivateKeyEntry, 
Certificate fingerprint (SHA1): B6:4C:05:97:F2:2A:2C:2A:95:5E:7A:E4:E3:8D:9C:CC:10:7E:3C:B7
intermediate, Apr 1, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): 73:6A:4D:C6:79:D6:82:DA:32:15:63:64:7C:60:F6:99:F0:DF:C2:68

В конфиге раскомментируем строку с AprLifecycleListener и коннектор для порта 8443:
# vim /etc/tomcat7/server.xml
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
...
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
   maxThreads="150" scheme="https" secure="true"
   clientAuth="false" sslProtocol="TLS"
   keystoreFile="/etc/tomcat7/keystore.kdb"
   keystorePass="123456"
   keyAlias="sert" />

Проверка:
# service tomcat7 start
# lsof -i :8443
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    8348 tomcat7   45u  IPv6 614620      0t0  TCP *:8443 (LISTEN)

Если нужно чтобы SSL работал на порту 443, то можно сделать перенаправление трафика вот так:
# iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT
# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443

Но лучше на фронтенд поставить какой-нибудь nginx.

2 комментария:

seoonly.ru комментирует...

Спасибо!

Victor комментирует...

Спасибо огромное, красавчик!