Portál AbcLinuxu, 29. dubna 2024 05:45

Chci podepsaný certifikát pro Apache

4.1.2006 16:30 | Přečteno: 7647× | Mohlo by se někomu hodit

Nedávno jsem byl donucen pustit se na tenký led instalace webového serveru s podporou šifrovaného spojení. Jelikož jsem chtěl být důkladný, nastudoval jsem si, jak pro server získat certifikát podepsaný vlastní certifikační autoritou. No a abych to nemusel studovat znovu, až to budu dělat přístě, tak jsem si sepsal postup. I když kdo ví, bude-li nějaké přístě.

Předem podotýkám, že instalaci jsem prováděl v prostředí SUSE 9.3 a předpokládá již rozchozený apache bez šifrovaného spojení a nainstalované OpenSSL.

Příprava

V souboru /etc/ssl/openssl.cnf se nachází nepřeberné množství parametrů, kterými se dá nastavit případně nabídnout výchozí hodnota při generování nových certifikátů. Vzhledem k tomu, že certifikáty je třeba generovat dva, není od věci si zde nastavit položky stateOrProvinceName_default na Czech Republic a podobně výchozí hodnotu města, organizace atd.
Také mi nevyhovuje název adresáře pro soubory certifikační autority demoCA a certifikát chci mít alespoň na deset let:

dir             = .
default_days    = 3650

Skript v /usr/share/ssl/misc/CA.sh na první pohled moc důvěru nebudí, ale svou práci nakonec odvede. Aby ji odvedl podle mých představ, opět jsem upravil proměnné na počet dní platnosti certifikátu a adresáře CA:

DAYS="-days 3652"
CATOP=.

Nakonec si vytvořím adresář pro svou certifikační autoritu:

mkdir /usr/share/ssl/ca && cd /usr/share/ssl/ca

Generování certifikátů

Vygenerování certifikační autority

Skript CA.sh s parametrem -newca mi vygeneruje certifikát a ostatní potřebné soubory pro správu vlastní certifikační autority. Zadávané heslo je samozřejmě nanejvýš vhodné si zapamatovat. Již v tomto kroku lze s výhodou využít předvyplněných údajů, kterými je potřeba údaje o certifikátu naplnit:

jupiter:/usr/share/ssl/ca # ../misc/CA.sh -newca
mkdir: adresář `.' nelze vytvořit: Soubor již existuje
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
..................................++++++
......++++++
writing new private key to './private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [CZ]:
State or Province Name (full name) [Czech Republic]:
Locality Name (eg, city) [Brno]:
Organization Name (eg, company) [Masaryk Univerzity]:
Organizational Unit Name (eg, section) [Faculty of Economics and Administration]:
Common Name (eg, YOUR name) []:Webmaster
Email Address []:webmaster@econ.muni.cz

Vygenerování certifikační žádosti

Stejný skript, jiný parametr -newreq nám vygeneruje další certifikát, tentokráte pro nás server, navíc připravený k podpisu certifikační autoritou, kterou jsme si připravili v předchozím kroku. Opět je potřeba zadat, ale jelikož toto heslo by bylo zapotřebí zadávat při každém startu apache, bude v následujícím kroku vymazáno.
Jako common name je v tomto případě potřeba uvést doménové jméno serveru, pro který certifikát připravujeme – jinak budeme upozorňováni, že certifikát nebyl vydán pro náš server:

jupiter:/usr/share/ssl/ca # ../misc/CA.sh -newreq
Generating a 1024 bit RSA private key
............++++++
..................................................................++++++
writing new private key to 'newreq.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [CZ]:
State or Province Name (full name) [Czech Republic]:
Locality Name (eg, city) [Brno]:
Organization Name (eg, company) [Masaryk Univerzity]:
Organizational Unit Name (eg, section) [Faculty of Economics and Administration]:
Common Name (eg, YOUR name) []:svi.econ.muni.cz
Email Address []:knihovna@econ.muni.cz

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Request (and private key) is in newreq.pem

Exportování klíče pro server

Následující příkaz vymaže s našeho certifikátu pro server heslo zadané v předchozím kroku (ale je nutno jej zadat) a zároveň jej připraví do správného formátu:

jupiter:/usr/share/ssl/ca # openssl rsa -in newreq.pem -out svi.key
Enter pass phrase for newreq.pem:
writing RSA key

Konečně podepsání certifikátu pro server

Zde zadáváme heslo certifikační autority:

jupiter:/usr/share/ssl/ca # ../misc/CA.sh -sign
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for ./private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
...
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
...
Signed certificate is in newcert.pem

Konfigurace apache

Certifikáty na správné místo

Předně si tu vygenerovanou trojici certifikát CA + certifikát serveru + privátní klíč serveru nakopírujeme do adresářů k tomu určených, přejmenujeme a upravíme oprávnění (pouze root je smí číst):

jupiter:/usr/share/ssl/ca # cp newcert.pem /etc/apache2/ssl.crt/svi.crt
jupiter:/usr/share/ssl/ca # cp svi.key /etc/apache2/ssl.key/
jupiter:/usr/share/ssl/ca # cp cacert.pem /etc/apache2/ssl.crt/svi-ca.crt
jupiter:/usr/share/ssl/ca # cd /etc/apache2/ssl.crt
jupiter:/etc/apache2/ssl.crt # chmod 400 svi.crt svi-ca.crt
jupiter:/etc/apache2/ssl.crt # cd ../ssl.key
jupiter:/etc/apache2/ssl.key # chmod 400 svi.key

Úpravy v ssl.conf /etc/sysconfig/apache2

Šablonu souboru pro virtuálního hosta apache s podporou SSL si přejmenujeme tak, aby měl příponu .conf, tj, například /etc/apache2/vhosts.d/ssl.conf a soubor upravíme:

SSLCertificateKeyFile /etc/apache2/ssl.key/svi.key
SSLCACertificateFile /etc/apache2/ssl.crt/svi-ca.crt # není důležitý
SSLCertificateFile /etc/apache2/ssl.crt/svi.crt

Aby Apache startoval s podporou SSL, je potřeba v souboru /etc/sysconfig/apache2 přidat potřebný příznak SSL:

APACHE_SERVER_FLAGS="SSL"

Hotovo

Po restartu apache by měl být obsah adresáře /srv/www/secure přístupný s pomocí protokol HTTPS.
Nabídnutím certifikátu CA ( v tomto případě svi-ca.crt) ke stažení umožníme uživatelům si tento certifikát nainstalovat do prohlížeče a pak už je přístup na náš server nebude otravovat hláškou, že není splněn test autenticity.

Odkazy na problematiky Apache+SSL

Čerpal jsem z těchto zdrojů:
http://httpd.apache.org/docs/2.0/ssl/
www.linuxsoft.cz/article_print.php?id_article=389
http://raibledesigns.com/wiki/Wiki.jsp?page=ApacheSSL
http://www.modssl.org/docs/2.7/ssl_faq.html

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

4.1.2006 17:13 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc hezké, asi se budu opakovat, ale i tohle by mohlo vyjít po rozšíření jako článek. Doufám, že se Robert co nejdřív uzdraví.
When your hammer is C++, everything begins to look like a thumb.
Shadow avatar 4.1.2006 17:28 Shadow | skóre: 25 | blog: Brainstorm
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin
Skvělý návod, výborně. Tohle co nejdříve vyzkouším. Díky.
If we do not believe in freedom of speech for those we despise we do not believe in it at all.
4.1.2006 18:35 Jan Grmela | skóre: 45 | blog: Kilo šťávy z lachtana | Brno
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin
Dobrý článek, něco takového se mi právě teď bude hodit :-)

Jenom bych chtěl upozornit, že existuje server CAcert.org, který se snaží stát certifikační autoritou, jež bude v prohlížečích a podobném softwaru, stejně jako např. známé Thawte nebo VeriSign. Jenže narozdíl od těchto dvou vydává certifikáty zdarma.
4.1.2006 21:55 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
A ako zarucuje, ze nevystavuje certifikaty pre subjekty, ktore sa tvaria ako niekto iny?
If you hold a Unix shell up to your ear, you can you hear the C.
xxx avatar 4.1.2006 22:35 xxx | skóre: 42 | blog: Na Kafíčko
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Neco takoveho sem taky budoval, jako vzor jsem pouzil knihu Protokol TCP/IP a bezpecnost. Ale kdybych vedel, ze existuje tahle sluzba, tak bych ji pouzil a usetril bych si praci. Podle me ma uplatneni, kdyz nekde potrebuji pouzit podepsany certifikat. Treba mail server firmicky s peti lidma.
Please rise for the Futurama theme song.
Vykook avatar 4.1.2006 21:37 Vykook | skóre: 23 | blog: Tomas
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin
Bravo sice se me to nehodi, ale i tak to bylo zajimave ;-)
Nejde nám o dobro druhých. Nejde nám o bohatství. Jde o čisté opojení mocí.
5.2.2007 16:59 YYY | skóre: 29 | blog: martinek
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin
Dekuju. Musel jsem tento problem vyresit. Vygooglil jsem vas navod a velice mi to pomohlo. Opravdu diky
23.3.2007 18:38 Chulda | skóre: 20
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin
Jen doplnim - me se stalo, ze 3. krok skoncil s hlaskou
unable to load Private Key
7181:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:642:Expecting: ANY PRIVATE KEY
tak problem je, ze 2. krok ulozil vysledek do 2 souboru
...
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Request is in newreq.pem, private key is in newkey.pem
takze 3.krok vyzaduje soubor newkey.pem
7.8.2007 00:41 DarkLogic | skóre: 8
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
taky diky tobe za tuto poznamku...stalo se mi to a na chvili jsem se citil ztracen. Tohle pomohlo!
7.8.2007 00:39 DarkLogic | skóre: 8
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin
I po roce a půl je to skvělý a užitečný článek. Zrovna se mi to díky němu v pořádku povedlo udělat. Takže moooc díky!
5.12.2008 13:17 Sonic
Rozbalit Rozbalit vše Re: Chci podepsaný certifikát pro Apache
Odpovědět | Sbalit | Link | Blokovat | Admin

Clanek je super, certifikat sem si podepsal, ale na to aby prohlizece navstevniky neotravovali o neplatnosti certifikatu to nestaci. Skoda.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.