Volt egy pár álmatlan munkanapom, amíg sikerült rendesen behegesztenem az ssl certifikaciot kedvenc tomcat webszerverünkbe. Még egy kis segítséget is kaptam a végén, amit ezúton is köszönök. Foglaljuk is össze hogyan is néz ki a telepítés és mik a buktatók.
Az SSL (Secure Socket Layer; Biztonsági Alréteg) egy protokoll réteg és amint azt a neve is mutatja, elsősorban forgalom titkosításhoz használjuk. A 7 rétegű OSI réteg, 3-as azaz Hálózati réteg és a 7-es applikációs réteg közt helyezkedik el. Titkosítás szempontjából három technológia használatos, Public-Private key azaz a nyilvános-titkos kulcs pár, a Symmetric Key azaz a szimmetrikus kulcs és a Digital Signature vagyis a digitális aláírás. Ebbe most nem megyünk bele mélyebben, ha érdekel titeket, rengeteg jó, magyar nyelvű leírás is van a google-n :)
Tehát vegyük egy kicsit gyakorlatiasabbra. A cél, hogy egy ssl szertifikációt installáljunk, tomcat alapú webszerverünkre, vagyis a tomcat alatt futó applikáció/honlap/whatever, https protokollon is elérhető legyen.
Alapfeltétel a java es a tomcat (meglepő). Itt található egy leírás ezek telepítéséről. Ha ezek megvannak, kedvenc java-s szerszámunk is a rendelkezésünkre áll, amivel könnyedén végig hegeszthetjük az egészet. Először is generáljunk egy privát kulcsot amit az ún. keystore-ban fogunk használni.
$keytool -genkey -alias sajat_alias_neved -keyalg RSA -keystore sajat_keystore_eleresiutvonal_plusznev
Enter keystore password: password
Ha nem adjuk meg a -keystore parameter, akkor egy rejtett .keystore nevű file az alapértelmezett. En a servernev.keystore konvenciót szeretem, jól átlátható és backupolható.
Itt majd kér egy passwordöt, amit adjunk meg is szépen neki. Majd még sok-sok jópofa kérdést kapunk, amire szintén válaszoljunk legjobb tudásunk szerint.
Ennek az eredménye 1 db file lesz, a már említett server.keystore, ami a kulcsokat tartalmazza, a java/tomcat számára emészthető formában.
A keytool -list -keystore saját keystore.keystore paranncsal le is kérdezhetjük, mit is tartalmaz a fileunk. Ez sokszor jól jöhet, ha már annyi cert van bele importálva, hogy összekavarodunk tőle.
Ha saját cert-el beérjük, akkor készen is lennénk, már csak a tomcat confignak kell megmutatni, hol is keresse a keystore-t. Ilyenkor van az tipikus jelenség, hogy egy http oldalra tévedsz (jellemzően intraneten), hogy a böngészővel le kell töltened a "self signed" certet es elfogadnod a rizikót, amit vállalsz a honlap megnevezésével.
Sokszor azonban nem érjük be ún. "self signed" cert-el, hanem vaskos pénzért (vagy akár olcsóbbért is) vásárolhatunk "certified" cert különböző cégektől, cserébe a böngészőnk se fog óvatoskodni.
Ilyenkor pedig a már meglévő keystore-unkbol - amiben ugye már ott pihennek a kulcsaink - egy certreq-et, vagyis egy "aláírás kérelmet" importalunk ki, amit elküldve a szolgáltatónak, visszaküld egy ellenőrzött cert-et amit aztán visszaimportalunk a keystore-unkba.
$keytool -certreq -keyalg RSA -alias sajatalias -file certreq.csr -keystore sajatkeystore
Enter keystore password: password
Az aliasnak bármit megadhatunk, amit a certifikació megkülönböztetésül használjuk majd, de jól jegyezzük meg, mert a tomcat konfigban és a visszakapott aláírt cert-ben is majd ezt kell használni!
A certreq.cst fileunkat pedig elküldjük a legszimpatikusabbnak talált cégnek aki aláírja majd és visszaküldi. A visszakapott és leellenőrzött file-t másoljuk be a szerverünkre, majd importaljuk be.
$keytool -import trustcacerts -alias sajatalias -file visszakapott.crt -keystore sajatkeystore
Ezek után még szükségünk lesz az ssl szolgáltó cégnek az ún. root és az inter (opcionális) certifikaciójára, mivel ez a egész eljárás hierarchikus felépítésű. Tehát irány a cég honlapja és onnét letöltjük a root.crt, illetve az inter.crt file-t, majd ezeket is jól beimportáljuk:
$keytool -import trustcacerts -alias root -file root.crt -keystore sajatkeystore
$keytool -import trustcacerts -alias inter -file inter.crt -keystore sajatkeystore
Ezek után nincs más hátra, mint megadni a tomcat konfigjában a helyet, hol is keresse a keystore fájlunkat. Alapból ki van kommentezve, és mivel xml a konfig, nehéz rátalálni, de ezt a sort kell keresni:
$vi /tomcat/conf/server.xml
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/root/sajat.keystore" keystorePass="keystore_jelszo"
keyAlias="sajat_alias"
/>