===== PKCS 12 ======
PKCS12 slouzi jako kontejner a take tam patri. Uvnitr je zakodovany klic a certifikat. V kontejneru muze byt mnohem vice sracek.
Je treba znat heslo.
Pouzivam pouze jeden prikaz pro ziskani klice a certfikatu.
openssl pkcs12 -in file.p12 -out file.pem
* [[http://www.openssl.org/docs/apps/pkcs12.html]] Navod primo z openssl.org
===== OpenSSL prakticky =====
=== Vygenerovani privatniho klice ===
Vygenerovani privatniho klice self signed CA (RSA klic, jako prispevek nahody jsou vzaty
jmenovane soubory). Klic ma delku 1024 bitu a ulozi se do souboru ca.key.
* genrsa - modul pro generovani privatniho klice.
''openssl genrsa -out ca.key 1024''
=== Vygenerovani certificate requestu ===
Vygenerovany privatni klic se pouzije jako vstup pro dopocitani verejneho klice
a z nej certificate requestu. Certifikacni request se ulozi do souboru ca.csr.
* req - modul pro PKCS#10 - vytvareni a manipulace s certifikaty v PKCS#10 formatu
* -key - negeneruje se privatni klic, ale pouzije se vygenerovany v predchozim kroku
* -new - generuje novy certificate request, pricemz je uzivatel dotazan na vyplneni atributu certifikatu selfsigned CA.
''openssl req -new -key ca.key -out ca.csr''
HINT: Misto predchozich dvou prikazu lze pouzit jeden:
''openssl req -newkey rsa:1024 -keyout ca.key -out ca.csr''
* req - viz predchozi prikaz
* -newkey - generuje privatni klic
* -keyout - soubor s privatnim klicem
=== Podepsani zadosti - obvykle dobre placenou stranou ===
Vygenerovany certificate request je podepsan privatnim klicem CA. Certifikat se ulozi
do souboru ca.crt.
* x509 - modul pro zobrazovani a podepisovani certificate requestu (generovani certifikatu)
* -days - doba platnosti certifikatu (selfigned CA)
* -signkey - privatni klic CA slouzici k podepsani
* -in vstupni soubor (certificate request)
* -req - oznaceni pouziti certificate requestu misto certifikatu v -in
* Tento zpusob podepisovani a vytvareni certifikatu slouzi pro vytvoreni selfsigned CA.
''openssl x509 -days 365 -signkey ca.key -in ca.csr -req -out ca.crt''
=== Vygenerovani privatniho klice uzivatele Peter===
Parametry viz prvni prikaz.
''openssl genrsa -out peter.key 1024''
=== Vygenerovani certificate requestu uzivatele Peter===
Parametry viz druhy prikaz.
''openssl req -new -key peter.key -out peter.csr''
=== Strana certifikacni autority nezapomene cislovat zadosti ===
Vytvoreni souboru se seriovym cislem certifikatu (pri kazdem vytvareni noveho
certifikatu nutno inkrementovat o 1. A zacneme od jednicky
''echo 01 >serial''
=== Podepsani zadosti - obvykle dobre placenou stranou ===
Podepsani certificate requestu (generovani certifikatu) uzivatele Peter selfsigned CA.
Oproti podepisovani u selfsigned CA, kde je pouzit parametr -signkey jsou zde parametry:
* -CAserial - seriove cislo certifikatu uzivatele profor
* -CA - certifikat podepisujici CA
* -CAkey - privatni klic prislusici k certifikatu podepisujici CA
''openssl x509 -days 365 -CAserial ./serial -CA ca.crt -CAkey ca.key -in peter.csr -req -out peter.crt''
=== Podepsani souboru pokus.txt privatnim klicem a certifikatem uzivatele Peter ===
Podepsany soubor ve formatu .p7m je ulozen v souboru podepsano.
* smime - modul pro smime sifrovani a podepisovani
* -sign - podepsani zpravy certifikatem a privatnim klicem
* -nodetach - specifikace uziti jako vystupniho formatu .p7m.
* -binary - neprovadi se konverze koncu radek
* -inkey - privatni klic uzivatele profor
* -signer - certifikat uzivatele profor
* -outform - formatovani vystupniho souboru do DER
Format DER je zvolen, protoze .p7m v Entrustu pouzivany je formatovany DER.
Overeno Entrustem, ze odepsano.p7m lze pri importu chainu certifikatu (PKCS#7 struktura) do Entrust address booku overit a zobrazit podepsany dokument.
''openssl smime -sign -outform DER -nodetach -in pokus.txt -binary -inkey peter.key -signer peter.crt -out podepsano.p7m''
------------
TRASH
------------
# Verifikace souboru podepsano.p7m pomoci certifikatu profor.crt a certifikatu CA.
# Vystup se uklada do souboru pokus.txt (puvodni podepsany soubor) a na stdout se vypise
# vysledek verifikace.
openssl smime -verify -in podepsano.p7m -certfile profor.crt -inform DER -CAfile ca.crt -out pokus.txt
# Prevod formatu certifikatu z PEM do DER
openssl x509 -inform PEM -outform DER -in ca.crt -out ca.p7c
# Zobrazeni obsahu certifikacniho chainu (pkcs#7 soubor) v DER formatu
# pkcs7 - modul pro manipulaci se soubory v DER nebo PEM formatu
openssl pkcs7 -print_certs -inform DER -in hp-ux_test.sh.p7m
# Zobrazeni obsah certifikatu v DER formatu
openssl x509 -inform DER -text -in ca.p7c
# Dekodovani base64 zakodovaneho souboru
openssl enc -base64 -in podepsano.p7s -d
# Vytvoreni lokalniho uloziste duveryhodnych certifikatu
# Lze pouzit pri verifikaci podpisu apod.
# mkdir certs
# cp etca.pem certs
# ln -s etca.pem certs/`openssl x509 -noout -hash -in etca.pem`.0
# mezi obracenymi apostrofy je spocitan hash certifikatu a ten je pouzit
# pri konstrukci jmena symlinku na certifikat.
# Verifikace podpisu u entrustem podepsaneho scriptu
# certfile neni potreba, bere se z chainu v .p7m
openssl smime -verify -in hp-ux_test.sh.p7m -inform DER -CAfile eurotel-et-cert.cer
# V pripade, ze je vnitrek podepisovaneho souboru jeste encodovan base64, dekoduje
# pomoci roury:
openssl smime -verify -in hp-ux_test.sh.p7m -inform DER -CAfile eurotel-et-cert.cer | openssl enc -base64 -d
# Vytvareni S/MIME certifikatu
# crl2pkcs7 - modul pro vytvareni PKCS#7 struktury z CRL a certifikatu
# -nocrl - do vystupniho souboru se nepridava CRL
# -cerfile - kazdy certifikat uvedeny timto parametrem je pridan do PKCS#7 struktury
openssl crl2pkcs7 -nocrl -certfile profor.pem -certfile ca.pem -outform DER -out profor-chain.p7c
# Konverze privatniho klice do formatu PKCS#8
# pkcs8 - modul pro manipulaci s privatnimi klici ve formatu PKCS#8
# -topk8 ocekavany format privatniho klice je normalne PKCS#8. Tento parametr
# meni tento format na tradicni format privatniho klice.
openssl pkcs8 -in profor.key -topk8 -outform DER -out profor.p8c
# Zasifrovani podepsaneho souboru
openssl smime -sign -outform DER -nodetach -in pokus.txt -text -inkey profor.key -signer profor.crt | openssl smime -encrypt -des3 profor-et-cert.cer -out podepsano_zasifrovano-pokus.txt.msg
* [[http://ahoj.fsik.cvut.cz/~profor/rtfm/soubory/openssl/openssl-priklady]] Puvodni text
===== Certifikat pro Apache, FTP, Mail apod. =====
For a signed, unencrypted key certificate:
Create certificate request
openssl req -new -days 365 -config vsftpd.cnf -keyout vsftpd.key -out vsftpd.req
Sign the request
openssl ca -config vsftpd.cnf -in vsftpd.req -out vsftpd.crt
Extract unencrypted key out of encrypted one
openssl rsa -in vsftpd.key -out vsftpd_out.key
Combine certificate and unencrypted key
cat vsftpd.crt vsftpd_out.key > vsftpd.pem
For a signed, encrypted key certificate simply copy vsftpd.key instead of vsftpd_out.key to vsftpd.pem.
You will be prompted for the pass phrase at startup.
Self-signed certificate
openssl genrsa -des3 -out server.key 4096
Now sign the certificate signing request. This example lasts 365 days:
openssl req -new -key server.key -out server.csr
Make a version of the server.key which doesn't need a password:
openssl rsa -in server.key -out server.key.insecure
Combine certificate and unencrypted key
cat server.crt server.key.insecure > server.pem
==== Links ====
* http://www.akadia.com/services/ssh_test_certificate.html
=====Let's Encrypt=====
Certifikaty zadarmo od Let's Encrypt
* https://letsencrypt.org/
Nejjedodussi nastaveni je pomoci programu certbot-auto:
certbot-auto certonly --standalone -d goox.cz -d www.goox.cz --pre-hook="service nginx stop" --post-hook="service nginx start"
Muzeme tomu rict, at predtim vypne a potom zapne apache/nginx
Samo si to overi, ze na dany server miri DNS a dle toho vygeneruje certifikaty.
Certifikaty jsou ve slozce
/etc/letsencrypt/live//
Certifikaty jsou platne jen po omezenou dobu.
Pote je potreba je obnovit. Na to slouzi zase program certbot-auto:
certbot-auto renew --standalone --pre-hook="service nginx stop" --post-hook="service nginx start"
Cele obnovovani se da dat do cronu:
vim /etc/cron.d/letsencrypt
A dane obnovovani poustet treba jednou mesicne:
#!/bin/bash
0 4 5 * * root /usr/local/sbin/certbot-auto renew --standalone --pre-hook="service nginx stop" --post-hook="service nginx start" > /dev/null 2>&1
===nginx===
Do nginx pridat certifikaty nasledovne:
ssl_certificate /etc/letsencrypt/live/goox.cz/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/goox.cz/privkey.pem;