This is an old revision of the document!
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
- 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 CRL3).
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, na kterém provozujem Certifikační Autoritu, a ldap.labka.cz, na kterém provozujem 389 Directory Server.
- create-certs-CA-LDAPS.sh
## ca.labka.cz # 1> Set the password: $ echo "<Your Very Secure Password>" > passwd # 2> Create a root 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> Strip the password from RSA key: $ openssl rsa -in myCA.key -out myCA_nopass.key -passin file:passwd # 4> Export CA certificate bundle along with the private key in PFX format: $ openssl pkcs12 -export -in myCA.pem -inkey myCA.key \ -passin pass:$(<passwd) -out CA.pfx -passout file:passwd # 5> Create CSR configuration template for LDAPS: $ cat <<EOT >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.1 EOT # 6> Create LDAPS CSR: $ 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> Create signing request using LDAPS required attribute $ openssl x509 -CA myCA.pem -CAkey myCA_nopass.key -CAcreateserial -req -in myCSR.csr -days 3650 \ -extfile myCSR.cnf -out myCSR.pem # 8> Export signed LDAPS certificate bundle in PFX format: $ openssl pkcs12 -export -in myCSR.pem -inkey myCSR.key -out ldaps.pfx -passout file:passwd # 9> Do the security clean-up $ rm -f passwd ## ldap.labka.cz # 10> Import Root Certificate $ 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 LDAPS Certificate $ 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> Verify LDAPS connection $ adtool list 'ou=People,dc=labka,dc=cz'