Kategorie: Server

Vlastní CA a generování certifikátů

Vytvoření vlastní certifikační autority. Nutné pro SSL podporu některých serverů a vhodné pro SSL podporu všech serverů.

Přehled souborů

/ca (Pracovní soubory naší CA)
/ca/signedcerts (Podepsané veřejné klíče)
/ca/private (Privátní klíče)

Příprava struktury

mkdir /ca
mkdir /ca/signedcerts
mkdir /ca/private
echo "01" > /ca/serial
touch /ca/index.txt

Konfigurační soubor CA

nano /ca/caconfig.cnf
[ ca ]
default_ca      = local_ca
[ local_ca ]
dir             = /ca
certificate     = $dir/cacert.pem # Verejny klic CA
database        = $dir/index.txt # Databaze vydanych certifikatu
new_certs_dir   = $dir/signedcerts # Adresar na hotove verejne klice
private_key     = $dir/private/cakey.pem # Privatni klic CA (Prisne tajny!)
serial          = $dir/serial # Cislovani
default_crl_days        = 365 # Vychozi platnost certifikatu (dny)
default_days            = 1825 # Vychozi doba po jakou bude mozne certifikat overit
default_md              = sha1
policy          = local_ca_policy
x509_extensions = local_ca_extensions
[ local_ca_policy ]
commonName              = optional # Nekdy je treba uvest
stateOrProvinceName     = supplied
countryName             = supplied
emailAddress            = optional
organizationName        = supplied
organizationalUnitName  = supplied
[ local_ca_extensions ]
subjectAltName          = DNS:alt.tradeshowhell.com
basicConstraints        = CA:false
nsCertType              = server
[ req ]
default_bits    = 2048
default_keyfile = /ca/private/cakey.pem
default_md      = sha1
prompt                  = no
distinguished_name      = root_ca_distinguished_name
x509_extensions         = root_ca_extensions
[ root_ca_distinguished_name ]
commonName              = Moje certifikacni autorita
stateOrProvinceName     = Czech Republic
countryName             = CZ
emailAddress            = root@email.cz
organizationName        = Organizace
organizationalUnitName  = Oddeleni
[ root_ca_extensions ]
basicConstraints        = CA:true

Vytvoření kořenového certifikátu

Kořenový certifikát by měl mít 2x delší platnost než běžné certifikáty, ale měl by být vydáván ve stejných intervalech. Tím se budou překrývat, takže to zkrátka bude fungovat. (Při vydání nového CA certifikátu by měl být ponechán ten starý tak aby se překrývaly a s vyjímkou prvního cyklu byly vždy 2 - starý a nový, mazaly by se až starší)
openssl req -new -x509 -days 1825 -keyout /ca/private/cakey.pem -out /ca/cacert.pem -config /ca/caconfig.cnf
Generating a 2048 bit RSA private key
..................................+++
..........................................................+++
writing new private key to '/ca/private/cakey.pem'
Enter PEM pass phrase:heslo
Verifying - Enter PEM pass phrase:heslo
-----

Vytvoření certifikátu

Vytvoříme nepodepsaný certifikát: (Toto u skutečných CA dělají zákazníci)
openssl req -new -nodes -keyout /ca/private/TEST.pem -out /ca/pozadavek.csr -newkey 2048
Generating a 2048 bit RSA private key
...................+++
...............................................................................................................+++
writing new private key to '/ca/private/TEST.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CZ
State or Province Name (full name) [Some-State]:Czech republic
Locality Name (eg, city) []:Mesto
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Organizace
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:192.168.56.105
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Podepíšeme certifikát kořenovým certifikátem CA: (Tím skutečné CA schvalují/vydávají certifikáty)
openssl ca -in /ca/pozadavek.csr -out /ca/signedcerts/TEST.pem -config /ca/caconfig.cnf
Using configuration from /ca/caconfig.cnf
Enter pass phrase for /ca/private/cakey.pem:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'CZ'
stateOrProvinceName   :PRINTABLE:'Czech republic'
localityName          :PRINTABLE:'Mesto'
organizationName      :PRINTABLE:'Organizace'
commonName            :PRINTABLE:'192.168.56.105'
Certificate is to be certified until Sep 13 14:21:34 2015 GMT (1825 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Certifikát pro různé servery (HTTPS, FTPS, LDAPS...)

Většinou se v konfiguračním souboru vyskytují následující proměnné:
SSLCertificateFile /ca/signedcerts/TEST.pem
SSLCertificateKeyFile /ca/private/TEST.pem
# Toto by nemelo byt nezbytne
#SSLCACertificateFile /ca/cacert.pem
V praxi by se samozřejmě měly požít spíše kopie těchto souborů. Ty by měly ukazovat na soubory které zkopírujete například z umístění v komentářích.

Tipy

  • Certifikát pro SSL apache musí v commonName (CN) mít IP serveru, nebo jeho název, jinak bude prohlížeč varovat před podvodnou stránkou
  • Do klientů (webových prohlížečů) se musí importovat veřejný CA certifikát, jinak budou tyto certifikáty považovat za neduvěryhodné.

Konverze CER do PEM

C:\openssl\openssl x509 -in TEST.cer -out TEST.pem

Komentáře


Nebyly přidány žádné komentáře.