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
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.
openssl genrsa -out ca.key 1024
Vygenerovany privatni klic se pouzije jako vstup pro dopocitani verejneho klice a z nej certificate requestu. Certifikacni request se ulozi do souboru ca.csr.
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
Vygenerovany certificate request je podepsan privatnim klicem CA. Certifikat se ulozi do souboru ca.crt.
openssl x509 -days 365 -signkey ca.key -in ca.csr -req -out ca.crt
Parametry viz prvni prikaz.
openssl genrsa -out peter.key 1024
Parametry viz druhy prikaz.
openssl req -new -key peter.key -out peter.csr
Vytvoreni souboru se seriovym cislem certifikatu (pri kazdem vytvareni noveho certifikatu nutno inkrementovat o 1. A zacneme od jednicky
echo 01 >serial
Podepsani certificate requestu (generovani certifikatu) uzivatele Peter selfsigned CA. Oproti podepisovani u selfsigned CA, kde je pouzit parametr -signkey jsou zde parametry:
openssl x509 -days 365 -CAserial ./serial -CA ca.crt -CAkey ca.key -in peter.csr -req -out peter.crt
Podepsany soubor ve formatu .p7m je ulozen v souboru podepsano.
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
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
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/<domena>/
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
Do nginx pridat certifikaty nasledovne:
ssl_certificate /etc/letsencrypt/live/goox.cz/cert.pem; ssl_certificate_key /etc/letsencrypt/live/goox.cz/privkey.pem;