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

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

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

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/<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

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;
 
doc/cert.txt · Last modified: 2016/12/20 17:30 by tomsa