Portál AbcLinuxu, 30. dubna 2025 13:18
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.
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
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
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
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
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
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
Š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"
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.
Č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
Tiskni
Sdílej:
unable to load Private Key 7181:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:642:Expecting: ANY PRIVATE KEYtak 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.pemtakze 3.krok vyzaduje soubor newkey.pem
Clanek je super, certifikat sem si podepsal, ale na to aby prohlizece navstevniky neotravovali o neplatnosti certifikatu to nestaci. Skoda.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.