===== 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;