This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
it:it_navody:bezpecnost:openssl [2018/03/01 13:55] matt |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== OpenSSL ====== | ||
- | |||
- | |||
- | Některé z příkazů využívají přepínač -config, za kterým následuje cesta ke konfiguračnímu souboru. Z tohoto souboru jsou načítány některé informace potřebné pro generování certifikátů. Obsah soubor je umístěn na konci textu. | ||
- | |||
- | === Obousměrné SSL === | ||
- | |||
- | ---- | ||
- | |||
- | |||
- | Vytvoříme self-signed certifikát CA s klíčem | ||
- | |||
- | ''openssl req -config ./openssl.cnf -newkey rsa:2048 -nodes -keyform PEM -keyout firma.CA.key -x509 -days 3650 -extensions certauth -outform PEM -out firmaCA.cer'' | ||
- | |||
- | Vygenerujeme žádost o serverový certifikát pro CA společně s klíčem | ||
- | |||
- | ''openssl req -new -newkey rsa:2048 -nodes -keyout server.firma.cz.key -out server.firma.cz.req'' | ||
- | |||
- | Podobně vygenerujeme žádost o klientský certifikát pro CA společně s klíčem | ||
- | |||
- | ''openssl req -config ./openssl.cnf -new -newkey rsa:2048 -nodes -keyout client.firma.key -out client.firma.req'' | ||
- | |||
- | Naší CA vydáme z žádostí serverový i klientský certifikát | ||
- | |||
- | ''openssl x509 -req -in server.firma.cz.req -CA firmaCA.cer -CAkey firmaCA.key -set_serial 100 -extfile openssl.cnf -extensions server -days 730 -outform PEM -out server.firma.cz.cer'' | ||
- | |||
- | ''openssl x509 -req -in client.firma.cz.req -CA firmaCA.cer -CAkey firmaCA.key -set_serial 101 -extfile openssl.cnf -extensions client -days 730 -outform PEM -out client.firma.cz.cer'' | ||
- | |||
- | Klientský certifikát a klíč uložíme ve formátu PKCS#12 | ||
- | |||
- | ''openssl pkcs12 -export -inkey client.firma.cz.key -in client.firma.cz.cer -out client.firma.cz.p12'' | ||
- | |||
- | Pro vynucení autentizace pomocí klientského certifikátu vložíme do virtualhostu apache následující konfiguraci. | ||
- | |||
- | ''SSLVerifyClient require''\\ | ||
- | ''SSLVerifyDepth 10''\\ | ||
- | ''SSLCACertificateFile /cesta/k/certifikatu/CA.cer''\\ | ||
- | |||
- | === Vygenerování privátního klíče a žádosti o certifikát pro CA === | ||
- | |||
- | ---- | ||
- | |||
- | |||
- | Ukázka vygeneruje dva soubory ''server.firma.cz.key'' a ''server.firma.cz.req'', kde se na rsa 2Kbit privátní klíč nepoužije passphrase. | ||
- | |||
- | ''openssl req -new -newkey rsa:2048 -nodes -keyout server.firma.cz.key -out server.firma.cz.req'' | ||
- | |||
- | Soubor ''server.firma.cz.req'' zašleme jako žádost o certifikát certifikační autoritě a získáme certifikát ''server.firma.cz.cer''. V případě, že již máme privátní klíč, tak k němu můžeme vygenerovat žádost příkazem | ||
- | |||
- | ''openssl req -new -key server.firma.cz.pem -out server.firma.cz.pem'' | ||
- | |||
- | === Vygenerování Self-Signed certifikátu a klíče === | ||
- | |||
- | ---- | ||
- | |||
- | |||
- | ''openssl req -x509 -newkey rsa:2048 -nodes -keyform PEM -keyout firma.key -days 3650 -outform PEM -out firma.cer'' | ||
- | |||
- | === Vygenerování Self-Signed certifikátu z žádosti a klíče === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl x509 -req -days 365 -in server.firma.cz.req -signkey server.firma.cz.key -out server.firma.cz.cer'' | ||
- | |||
- | === Kontrola informací z žádosti a její verifikace === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl req -in server.firma.cz.req -noout -text'' | ||
- | |||
- | ''openssl req -in server.firma.cz.req -noout -verify -key server.firma.cz.key'' | ||
- | |||
- | === Kontrola privátního klíče === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl rsa -noout -text -in server.firma.cz.key'' | ||
- | |||
- | === Kontrola informací v certifikátu a jeho verifikace === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl x509 -text -in ./server.firma.cz.cer''\\ | ||
- | ''openssl verify server.firma.cz.cer''\\ | ||
- | ''openssl pkcs12 -info -in ./server.firma.cz.p12'' | ||
- | |||
- | === Konverze formátů === | ||
- | |||
- | ---- | ||
- | |||
- | Pokud potřebujeme změnit formát lze vhodně zkombinovat direktivy ''-inform'' a ''-outform''. | ||
- | |||
- | ''openssl x509 -outform der -in server.firma.cz.req -out server.firma.cz.req.der'' | ||
- | |||
- | === Export certifikátu s klíčem z pkcs12. === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl pkcs12 -in ./file.oksystem.cz.2.p12 -clcerts -nokeys -out ./file.oksystem.cz.2.cer''\\ | ||
- | ''openssl pkcs12 -in ./file.oksystem.cz.2.p12 -nocerts -nodes -out file.oksystem.cz.2.key'' | ||
- | |||
- | === Import certifikátu s klíčem do pkcs12. === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl pkcs12 -export -inkey client.firma.cz.key -in client.firma.cz.cer -out client.firma.cz.p12'' | ||
- | |||
- | === Odstranění passphrase z privátního klíče === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl rsa -in server.firma.cz.key -out server.firma.cz-bezpassphrase.key'' | ||
- | |||
- | === Připojení k smtp serveru === | ||
- | |||
- | ---- | ||
- | |||
- | ''openssl s_client -connect remote.host:25 -starttls smtp'' | ||
- | |||
- | === Konfigurační soubor openssl.cnf === | ||
- | |||
- | ---- | ||
- | |||
- | '' [ req ] | ||
- | default_md = sha2\\ | ||
- | distinguished_name = req_distinguished_name\\ | ||
- | \\ | ||
- | [ req_distinguished_name ]\\ | ||
- | countryName = Country\\ | ||
- | countryName_default = CZ\\ | ||
- | countryName_min = 2\\ | ||
- | countryName_max = 2\\ | ||
- | localityName = Locality\\ | ||
- | localityName_default = Prague\\ | ||
- | organizationName = Organization\\ | ||
- | organizationName_default = OKsystem a.s.\\ | ||
- | commonName = Common Name\\ | ||
- | commonName_max = 64\\ | ||
- | \\ | ||
- | [ certauth ]\\ | ||
- | subjectKeyIdentifier = hash\\ | ||
- | authorityKeyIdentifier = keyid:always,issuer:always\\ | ||
- | basicConstraints = CA:true\\ | ||
- | crlDistributionPoints = @crl\\ | ||
- | \\ | ||
- | [ server ]\\ | ||
- | basicConstraints = CA:FALSE\\ | ||
- | keyUsage = digitalSignature, keyEncipherment, dataEncipherment\\ | ||
- | extendedKeyUsage = serverAuth\\ | ||
- | nsCertType = server\\ | ||
- | crlDistributionPoints = @crl\\ | ||
- | |||
- | [ client ]\\ | ||
- | basicConstraints = CA:FALSE\\ | ||
- | keyUsage = digitalSignature, keyEncipherment, dataEncipherment\\ | ||
- | extendedKeyUsage = clientAuth\\ | ||
- | nsCertType = client\\ | ||
- | crlDistributionPoints = @crl\\ | ||
- | \\ | ||
- | [ crl ]\\ | ||
- | URI=http://testca.local/ca.crl'' | ||