Typické operácie s OpenSSL

Vygenerovanie kľúčového páru (keypair)

openssl req -new -x509 -keyout privkey.pem -newkey rsa:2048 -days 730
  • použije sa 2048bitový RSA
  • platnosť certifikátu bude 2 roky

Privátne kľúče

Vygenerovanie privátneho kľúča

Vygenerovanie 1024bitového privátneho kľúča RSA:

openssl genrsa -out private.pem 1024

Vygenerovaný kľúč obsahuje informácie, pomocou ktorých možno odvodiť verejný kľúč (pozri nižšie).

Výpis obsahu privátneho kľúča

Privátny kľúč musí byť vo formáte PEM BEGIN RSA PRIVATE KEY:

openssl rsa  -modulus -text -in private.pem

Prevod PPK (Putty formát) na PEM

puttygen private.ppk -O private-openssh -o private.pem

Predpokladá sa, že na Linuxe / MacOS je nainštalovaný balíček putty.

Odšifrovanie / odstránenie hesla z privátneho kľúča

Kľúč musí obsahovať príznak ENCRYPTED:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED

Heslo odstránime cez:

openssl rsa -in private.pem -out private.nopassword.pem

Operácie s CSR (Certificate Signing Request)

Vygenerovanie CSR z privátneho kľúča

Potrebujeme privátny kľúč používateľa, pre ktorého generujeme CSR:

openssl req -key private.pem -new

Výpis obsahu CSR

openssl req -in user1.csr -text

Operácie s certifikátmi

Certifikát je výsledkom podpisu verejného kľúča certifikačnou autoritou.

Získanie certifikátu z HTTP servera

V Linux shelli:

echo | openssl s_client -connect serverik.sk:443 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

Výpis obsahu PEM certifikátu

Certifikát musí byť v tvare BEGIN CERTIFICATE

openssl x509 -modulus -in certificate.pem

Extrakcia verejného kľúča

openssl x509 -pubkey -noout -in certificate.pem

Na vstupe musí byť certifikát začínajúci na

-----BEGIN CERTIFICATE-----

Na výstupe bude verejný kľúč s hlavičkou

-----BEGIN PUBLIC KEY-----

Výpis certifikátu v binárnom formáte (DER)

    openssl x509 -in certificate.der -inform der -text

Import PEM => JKS

Ak máme .pem súbor, ktorý napr. obsahuje certifikát servera (stiahnutého zo SSL), môžeme ho importnúť do Java keystoru takto:

keytool -importcert -keystore keystore.jks -file certifikat.pem

Nástroj sa spýta na konfiguračné nastavenia: typicky na heslo do keystoru a alias, pod ktorým bude certifikát v keystore uložený.

Prirodzene, certifikát musí byť v tvare BEGIN CERTIFICATE.

Operácie s verejnými kľúčmi

Výpis obsahu verejného kľúča

Verejný kľúč musí byť vo formáte PEM BEGIN PUBLIC KEY

openssl rsa -in public.pem -pubin -modulus -text

Export certifikátu z Java Keystore

keytool -exportcert -keystore ca_truststore -alias mykey -rfc > ca_cert.pem

Parametre:

  • ca_truststore: názov súboru s keystorom
  • mykey: alias verejného kľúča
  • parameter -rfc exportne kľúč v PEM formáte (BEGIN CERTIFICATE)

Prevod PEM => PKCS#12

Keystory v Jave žiaľ nepodporujú formát PEM. Obvykle je najjednoduchšie previesť ich do formátu PKCS#12 (.p12, .pfx), kde v jednom súbore je možné udržiavať i privátny i verejný kľúč.

Ak máme verejný kľúč user_cert.pem a súkromný kľúč user_key.pem, konvertovať do PKCS#12 môžeme cez:

openssl pkcs12 -export -in user_cert.pem -inkey user_key.pem -out user.p12 -name mykey

Kľúč sa do PKCS#12 uloží pod aliasom mykey.

Prevod DER => PEM

Prevod certifikátu v binárnom kódovaní (DER) do textového kódovania PEM:

    openssl x509 -in sts-cert_der.cer -inform der -outform pem

Konverzia certifikátov z certifikačnej autority GoDaddy pre Tomcat

Z GoDaddy dostaneme tri súbory:

  • [číslo].crt
  • gd_bundle.crt
  • gd_intermediate.crt

Predpokladáme, že v private.pem máme privátny kľúč, ktorý sme použili pri generovaní certifikátu v CA.

  1. Zlepíme všetky súbory do jedného all.pem

    cat 7a2565f3d52f0911.crt gd_bundle.crt gd_intermediate.crt private.pem > all.pem
    
  2. Vyrobíme PKCS#12 úložisko cez OpenSSL

    openssl pkcs12 -export -chain -CAfile gd_bundle.crt -in all.pem -out keystore.tomcat -name www.mymegaproject.sk
    
  3. Prevedieme PKCS#12 na Java úložisku JKS

    keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype pkcs12 -destkeystore tomcat.jks -deststoretype jks -deststorepass changeit
    
  4. Nakonfigurujeme Tomcat

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="500" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               maxConnections="8192"
               keystoreFile="/opt/tomcat/conf/tomcat.jks"
               keystorePass="changeit"
    />
    

Rýchla certifikačná autorita

  1. Vytvoríme adresár a v ňom súbor ca.conf.

    [ ca ]
    default_ca = ca_default
    [ ca_default ]
    dir = .
    certs = .
    new_certs_dir = new_certs
    database = database.txt
    serial = serial.txt
    RANDFILE = rand
    certificate = ca_cert.pem
    private_key = ca_key.pem
    default_days = 365
    default_crl_days = 30
    default_md = md5
    preserve = no
    policy = generic_policy
    [ generic_policy ]
    countryName = optional
    stateOrProvinceName = optional
    localityName = optional
    organizationName = optional
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional
    
  2. Získame alebo vygenerujeme dvojicu privátneho a verejného kľúča pre certifikačnú autoritu. Oba nech sú vo formáte PEM — privátny kľúč ca_cert.pem, verejný kľúč ca_key.pem. Umiestnime ich do adresára vedľa konfiguráku.

  3. Vytvoríme prázdny súbor database.txt, ktorý sa bude postupne plniť vygenerovanými certifikátmi.
  4. Vytvoríme súbor serial.txt, v ktorom budú sériové čísla certifikátov. Musí obsahovať hexadecimálne číslo, ktoré sa bude postupne navyšovať. Na začiatok môžeme uviesť hodnotu 01 (nula na začiatku indikuje hexa hodnotu.)
  5. Vytvoríme adresár new_certs, v ktorom sa budú objavovať vygenerované certifikáty.
  6. Spustenie CA: vytvorenie certifikátu na základe CSR súboru input.csr:

    openssl ca -config ca.conf -in input.csr
    

Operácie s privátnymi kľúčmi

Zistenie informácií o PKCS#8 kľúči

PKCS#8 kľúč obvykle vypadne pri generovaní kľúčového páru. Začína sa

-----BEGIN ENCRYPTED PRIVATE KEY-----

Zistiť informácie môžeme cez

openssl rsa -in privkey.unencrypted.pem -text 

Prevod PKCS#8 kľúča na nešifrovaný kľúč

Ak chceme mať výsledok v tvare

-----BEGIN PRIVATE KEY-----

použime:

openssl pkcs8 -in privkey.pem

Generovanie verejného kľúča na základe privátneho kľúča

openssl rsa -in privkey.pem -pubout

Výsledkom je súbor s hlavičkou

-----BEGIN PUBLIC KEY-----