|**Project owner:** |[[:user:embargo|embargo]]|
|**Interested:** |[[:user:dron|dron]], [[:user:lichnak|lichnak]]|
|**Related:** | |
|**License:** |[[http://www.wtfpl.net/about/|WTFPL]] |
====== Public Key Infrastructure ======
V tomto dokumentu chci nastínit základy provozování a používání PKI postavené na ''openssl''.
V první části představím nezbytné součásti a koncepty. Druhá část se bude věnovat reálným příkladům.
===== Koncept PKI =====
X.509 PKI je bezpečnostní architektura používající zavedené kryptomechanizmy k podpoře případů užití jako je ochrana e-mailove pošty, autentifikace (nejen) webových služeb. Je velice podobná jiným systémům založeným na užití veřejných klíčů, jako je například OpenPGP.
==== Postup vydání certifikátu ====
{{:project:pki:pkiproces.png?direct |}}
- Žadatel vygeneruje CSR((Certificate Signing Request)) a doručí jej do CA((Certificate Authority)).
- CA vystaví požadovaný certifikát dle poskytnutého CSR a vrátí jej žadateli.
- V případě, že je z libovolného důvodů vystavený certifikát revokován, CA jej přidá do jejího CRL((Certificate Revocation List)).
==== Součásti PKI ====
* Public Key Infrastructure (PKI)
* Bezpečnostní architektura, kde je důvěra založena na podpisu důvěryhodné certifikační autority.
* Certifikační autorita (CA)
* Entita vystavující certifikáty a CRL.
* Registrační autorita (RA)
* Entita starající se o zápisy do PKI. Může být stejná jako CA.
* Certifikát
* Veřejný klíč a jeho ID svázané podpisem CA.
* Certificate Signing Request (CSR)
* Žádost o certifikaci. Obsahuje veřejný klíč a ID, které mají být certifikovány.
* Certificate Revocation List (CRL)
* Seznam revokovaných certifikátů. V pravidelných intervalech je vystavován CA.
* Certification Practice Statement (CPS)
* Politika popisující strukturu a procesy konkrétní CA.
==== Typy certifikačních autorit ====
* Root CA
* Také se označuje jako kořenová. Je to autorita na vrcholu PKI hierarchie. Vydává certifikáty pro mezilehlé certifikační autority.
* Intermediate CA
* Mezilehlá certifikační autorita. Nepoužívá se k vydávání koncových certifikátů, vydává certifikáty pro podpisové CA.
* Signing CA
* Podepisující autorita. Nachází se na spodku PKI hierarchie a slouží k vydávání koncových certifikátů.
==== Typy certifikátů ====
* CA certificate
* Je to certifikát samotné certifikační autority. Slouží k podpisu dalších certifikátů a CRL.
* Root certificate
* Neboli kořenový certifikát. Je podepsány sám sebou (šelf-signed) a slouží jako počáteční bod řetězce důvěry.
* Cross certificate
* Křížový certifikát. Je to certifikát CA podepsaný externí certifikační autoritou.
* User certificate
* Koncový certifikát vydaný pro jeden nebo více použití, například ochrana e-mailové komunikace, ověření serverů nebo uživatele atd. Jako jediný nemůže být použit k podpisu dalších certifikátů.
==== Formáty certifikátů ====
* Privacy Enhanced Mail (PEM)
* Textový formát, zakódovaný pomocí base64. Používá se všude tam, kde je použito openssl (Apache mód_ssl, nginx, stunnel, ...)
* Distinguished Encoding Rules (DER)
* Binární formát používaný v MS prostředí.
==== CA na CentOS 7 ====
Přepokládejme dva servery:
* ca.labka.cz (192.168.1.11), na kterém provozujem Certifikační Autoritu [[https://www.openssl.org/|OpenSSL]],
* a ldap.labka.cz (192.168.1.12), na kterém provozujem LDAP Server [[http://directory.fedoraproject.org/|389 Directory Server]] nebo [[http://www.openldap.org/|OpenLDAP]].
## ca.labka.cz
# 1> Nastav heslo:
$ echo "" > passwd
# 2> Vytvoř kořenovou CA:
$ openssl req -x509 -newkey rsa:4096 -keyout myCA.key -out myCA.pem -days 3650 \
-subj "/C=CZ/L=Ostrava/O=Labka/OU=Infra/CN=ca.labka.cz/emailAddress=admin@admin" \
-passout file:passwd
# 3> Zbav RSA klíč hesla:
$ openssl rsa -in myCA.key -out myCA_nopass.key -passin file:passwd
# 4> Exportuj CA balík certifikátů s privátním klíčem v PFX formátu:
$ openssl pkcs12 -export -in myCA.pem -inkey myCA.key \
-passin pass:$( Vytvoř konfigurační LDAP vzor pro CSR:
$ cat <myCSR.cnf
basicContrains=CA:FALSE
keyUsage=nonRepudiation,digitalSignature,keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=DNS:LDAP.LABKA.CZ,DNS:LABKA.CZ,IP:192.168.1.12
EOT
# 6> Vytvoř LDAPS CSR soubory:
$ openssl req -out myCSR.csr -newkey rsa:4096 -nodes -keyout myCSR.key \
-subj "/C=CZ/L=Ostrava/O=Labka/OU=Infra/CN=ldap.labka.cz/emailAddress=admin@admin"
# 7> Podepiš požadavek o podepsaní certifikátu pomocí LDAP vzoru:
$ openssl x509 -CA myCA.pem -CAkey myCA_nopass.key -CAcreateserial -req -in myCSR.csr -days 3650 \
-extfile myCSR.cnf -out myCSR.pem
# 8> Exportuj podepsaný LDAPS balík certifikátů v PFX formátu:
$ openssl pkcs12 -export -in myCSR.pem -inkey myCSR.key -out ldaps.pfx -passout file:passwd
# 9> Bezpečnostní vložka
$ rm -f passwd
## ldap.labka.cz
# 10> Import kořenového certifikátu CA
$ openssl pkcs12 -in CA.pfx -nocerts -out myCA.key
$ openssl rsa -in myCA.key -out myCA.decrypted.key
$ openssl pkcs12 -in CA.pfx -clcerts -nokeys -out myCA.crt
$ update-ca-trust enable
$ cp myCA.crt /etc/pki/ca-trust/source/anchors/
$ update-ca-trust extract
$ openssl verify myCA.crt
# 11> Import certifikátu LDAPS
$ openssl pkcs12 -in ldaps.pfx -nocerts -out ldaps.key
$ openssl rsa -in ldaps.key -out ldaps.decrypted.key
$ openssl pkcs12 -in ldaps.pfx -clcerts -nokeys -out ldaps.crt
$ cp ldaps.key \
/etc/pki/tls/certs/ldaps.crt \
/etc/pki/tls/certs/myCA.crt \
/etc/openldap/certs/
$ update-ca-certificates
$ openssl verify ldaps.crt
# 12> Ověř LDAPS spojeni
$ adtool list 'ou=People,dc=labka,dc=cz'
==== Linky ====
[[https://www.sans.org/reading-room/whitepapers/certificates/building-managing-pki-solution-small-medium-size-business-34445|]]
[[https://www.ejbca.org/repository.html|]]
[[http://henning.kropponline.de/2014/09/14/openldap-setup-w-ca-signed-certificate-centos/|]]
[[https://www.openssl.org/docs/man1.0.2/apps/x509v3_config.html|]]
[[http://jordaneunson.com/2009/10/openvpn-access-server-openldap-memberof/|]]
[[https://ripe71.ripe.net/presentations/32-Automated-Certificate-Management.pdf|]]