Máte certifikát z OpenSSL: ako ho importnete do Tomcatu, aby sa dal použiť pri SSL?
Mali by ste mať:
certifikát servera (
.crt
), ktorý začína:-----BEGIN CERTIFICATE-----
privátny kľúč servera (
.key
), ktorý začína:-----BEGIN PRIVATE KEY-----
reťazec (chain) certifikačných autorít, ktoré overujú vydaný certifikát servera. Súbor by mal obsahovať viacero blokov začínajúcich s
-----BEGIN CERTIFICATE-----
.
Súbory nech sa volajú postupne:
hostname.crt
hostname.key
hostname.chain.pem
Postup
Pripojíme
.crt
súbor k súboru chain. (Je to potrebné kvôli ďalšiemu kroku.)cat hostname.crt hostname.chain.pem > hostname.all.chain.pem
Z privátneho kľúča a reťazca certifikátov vytvoríme úložisko (keystore) privátneho kľúča a certifikátu (verejného kľúča) vo formáte PKCS#12:
openssl pkcs12 -export -inkey hostname.key -in hostname.all.chain.pem -out hostname.p12
OpenSSL si požiada heslo, ktorým bude chránený keystore:
Loading 'screen' into random state - done Enter Export Password: Verifying - Enter Export Password:
Keystore vo formáte PKCS#12 prevedieme na formát Java Keystore (JKS), ktorému dokáže porozumieť Tomcat. Použijeme na to nástroj
keytool
z JDK.keytool -importkeystore -srckeystore hostname.p12 -srcstoretype PKCS12 -destkeystore keystore.jks
keytool
si vyžiada heslo, ktorým je chránený PKCS#12 keystore a požiada si nové heslo, ktorým ochráni keystore JKS.Enter destination keystore password: Enter source keystore password: Entry for alias 1 successfully imported. Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Dvojica privátneho kľúča a certifikátu v JKS keystore bola uložená pod aliasom
1
. Premenovať ho môžeme opäť pomocoukeytool
:keytool -changealias -alias 1 -keystore keystore.jks
Nástroj si vyžiada cieľový alias a heslo, ktorým bol chránený keystore:
Enter destination alias name: odin.ics.upjs.sk Enter keystore password:
Výsledný keystore potom môžeme použiť v Tomcate v konfigurácii
<Connector>
a pre SSL: stačí nastaviť cestu k súboru keystoru, alias a heslo.<Connector port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="${user.home}/.keystore" keystorePass="changeit" clientAuth="false" sslProtocol="TLS"/>