Openssl ja Subject Alternative Name

From ICO wiki

Autor

Rain Adamson, AK31
Kevad 2015

Sissejuhatus

Käesoleva artikli eesmärk on tutvustada,kuidas saab OpenSSL Subject Alternative Name'i (SAN ) kasutades genereerida sertifikaate mis võimaldaks kasutada samas serveris ühte serftifikaati mitmel erineva domeeniga. Vaikimisi on probleemiks, et iga SSL kasutav virtual host vajaks oma IP aadressi. SAN kasutamine aitab aga sellest mööda minna. Ühtlasi on see ka kasulik näiteks kui SSL veebisait peaks kättesaadav olema nii http://www.sait.ee kui ka http://sait.ee kujul, ilma et me peaks selleks uut sertifikaati kasutama. Võrreldes wildcard sertifikaadiga mis võimaldaks ühe sertifikaadiga katta näiteks kõik aadressid mis langeks mustri alla *.sait.ee võimaldab SAN kasutav sertifikaat lisada ka täiesti teisi domeeni nimesi näiteks sait.ee ja midagimuud.ee. Wildcard sertifikaaat võimaldaks katta vaid ühe domeeni. Teine alternatiiv oleks kasutada SNI (Server Name Indication ) kuid selle tugi võib puududa vanemates brauserites ja rakendustes.

Eeldused

Soovitav on tutvuda praktika juhendi https://wiki.itcollege.ee/index.php/Veebiserveri_labor_v.2 peatükiga "SSL_keskkonna_loomine". Kuna Apache seadistamist SSL'iga siin referaadis põhjalikult ei käsitleta.
Töö kirjutaja kasutas Ubuntu Server 14.04.2 LTS versiooni. Kuid kõik peaks toimima ka teistes Linuxi distributsioonides.

Vajalikud tarkvarapaketid :

OpenSSL
BIND - loodud 3 alamdomeeni: sait1.sahver.zz,sait2.sahver.zz ja sait3.sahver.zz või kantud need sisse hosts faili.
Apache2 - seadistatud on eelnevalt nimetatud domeenidele virtual hostid ning olemas SSL tugi.

Ülesanne

Meil on veebiserver kolme alamdomeeniga ning kõik nad peaks töötama üle SSL'i .Eeldame, et veebiserver on meil SSL'iga töötamiseks juba seadistatud ja peame seadistusfaili lisama vaid sertifikaadi.

Sertifikaadi genereerimine

Loome /etc/apache2 kataloogi uue alamkataloogi certs ning edasist tööd jätkame selles.

 mkdir /etc/apache2/certs
 cd /etc/apache2/certs

Genereerime serverile võtmepaari. Küsimusele kuhu salvestada vastame /etc/apache2/certs/id_rsa.key

 ssh-keygen -t rsa -b 1024

Selless, et luua sertikitaati mis kasutaks subject alternative name'e tuleb meil kohandada OpenSSL seadistusfaili. Selleks, et mitta vaikeseadistust muutma asuda loome SAN toega sertifikaadi loomiseks uue seadistusfaili.
Kopeerime OpenSSL vaikimisi seadistusfaili oma kodukataloogi cp /etc/ssl/openssl.cnf ~/openssl.cnf ja teeme seal paar muudatust. :
[ req ] sektsioonis kommenteerime sisse või vajadusel lisame järgneva rea:

req_extensions = v3_req

Lisame [ v3_req ] sektsiooni lõppu rea

subjectAltName = @alt_names


Ning loome [ v3_req ] järele uue sektsiooni kus loetleme soovitud domeenid / alamdomeenid mida soovime soovime kasutada.

[alt_names]
DNS.1 = sait1.sahver.zz
DNS.2 = sait2.sahver.zz
DNS.3 = sait3.sahver.zz


Loome sertifikaadi taotluse faili ning kasutame selleks meie eelnevalt kohandatud seadistusfaili. Alltoodavatele küsimustele saab vajadusel eelnevalt loodud openssl.cnf faili [ req_distinguished_name ] sektsioonis ise määrata ka vaikevastused kui peaks tarvis olema tihti sertifikaate luua. Common name võiks märkida näiteks sahver.zz domeeni kui seda ka virtual hostina kasutaksime, hetkel aga kasutame sait1.sahver.zz.

 openssl req -new -key id_rsa.key -out veebid_san.csr -config openssl.cnf

väljund peaks olema sarnane:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ET
State or Province Name (full name) [Some-State]:Harjumaa
Locality Name (eg, city) []:Tallinn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Surra Murra
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:www.sait1.sahver.zz
Email Address []:webmaster@sahver.zz

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Kui soovime veenduda, et taotluse loomine õnnestus võime kasutada järgnevat käsku.

 openssl req -in veebid_san.csr -noout -text

Allkirjastame serveri privaatvõtmega eelenvalt loodud sertifikaaditaotluse.

 openssl x509 -req -extensions v3_req -days 365 -in veebid_san.csr -signkey id_rsa.key -out veebid.crt -extfile openssl.cnf

Sertifikaadi testimine

Võtame loodud sertifikaadi apache virtualhostides kasutusele. Ehk vastavate Apache virtual hostide SSL seadistustes määrame, et kasutataks vast loodud sertifikaati.

 SSLCertificateFile /etc/apache2/certs/veebid.crt
 SSLCertificateKeyFile /etc/apache2/certs/id_rsa.key

Nüüd peale veebiserveri taaskäivitamist peaks olema võimalik kõiki veebilehti millele me sertifikaadi lõime külastada ja testida kas sertifikaat töötab. Kui näiteks https://sait2.sahver.zz lehel olles Firefoxis sertifikaati lähemalt vaadata peaks avanema järgmine pilt:
Firefox san.png

Kokkuvõte

Tegu kasuliku lahendusega, kuna mõnel juhul võib mõistlik olla mitme sertifikaadi soetamise asemel kasutada vaid ühte. Ka võib olla lihtsalt olukord on saadaval vaid üks IP aadress ja on vaja SSL kasutada mitme erineva virtual hosti juures.

Kasutatud kirjandus

http://wiki.cacert.org/FAQ/subjectAltName https://www.openssl.org/docs/apps/x509v3_config.html https://rtcamp.com/wordpress-nginx/tutorials/ssl/multidomain-ssl-subject-alternative-names/