Tento článek vám ukáže, jak nastavit certifikační autoritu s OpenSSL. Digitální certifikáty jsou dokumenty používané k prokázání vlastnictví veřejného klíče. Například digitální certifikáty se používají k autentizaci navštívených webových stránek prostřednictvím HTPS. Dalším příkladem běžného použití je podepisování dokumentů.
Certifikáty obsahují informace o klíči, identitě jeho vlastníka a digitálním podpisu entity, která ověřila obsah. Certifikační autorita (CA) je organizace, která vydává digitální certifikáty.
Tento článek také ukáže, jak sdělit ostatním hostitelům, aby důvěřovali vydaným certifikátům.
Upozornění :toto by mělo být pouze pro testovací účely nebo pro ověření konceptu. Pro skutečné použití byste měli získat skutečné certifikáty od skutečné certifikační autority. Pokud například chcete pouze HTTPS a chcete certifikát zdarma, přejděte na https://letsencrypt.org/
Nainstalujte OpenSSL
Můj hlavní OS je FreeBSD a rád používám strom portů, k instalaci stačí spustit:
# cd /usr/ports/security/openssl
# make install clean
A počkejte, až bude připravena kompilace a instalace portu. Věnujte pozornost tomu, že pravděpodobně již máte spustitelný soubor openssl (v cestě /usr/bin) a pokud jej přesto nainstalujete, binární soubor ‚port‘ bude v /usr/local /bin/openssl.
Když jsem se poprvé zabýval OpenSSL, poskytnutý binární soubor mi nefungoval, ale port ano.
Konfigurační soubor
Ačkoli můj hlavní OS je FreeBSD, od této chvíle by měly být stejné kroky na jakémkoli OS, který podporuje OpenSSL. Možná budete muset upravit některé cesty, ale to je vše.
Příklad a dobře komentovaný konfigurační soubor najdete (opět ve FreeBSD) v /usr/local/openssl/openssl.conf. Toto je po nějakém vyčištění moje, zdůraznil jsem nejdůležitější nastavení:
#OpenSSL Home current directory HOME = /var/openssl #choose any reasonable location #RANDFILE = $ENV::HOME/.rnd # Extra OBJECT IDENTIFIER info: oid_section = new_oids [ new_oids ] tsa_policy1 = 1.2.3.4.1 tsa_policy2 = 1.2.3.4.5.6 tsa_policy3 = 1.2.3.4.5.7 [ ca ] default_ca = YourCA # The default Certificate Authority section [ YourCA ] #most important section of your file dir = /var/openssl/yourCA # Where everything is kept # choose any reasonable location certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/CA/yourCA.crt # The CA certificate serial = $dir/serial # The current serial number #crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/CA/yourCA.crl # The current CRL private_key = $dir/CA/yourCA.key # The private key RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert # Comment out the following two lines for the "traditional" # (and highly broken) format. name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = default # use public key default MD preserve = no # keep passed DN ordering policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = supplied organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional localityName = supplied # For the 'anything' policy. At this point in time, you must list all # acceptable 'object' types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional ############################################################ [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extentions to add to the self signed cert string_mask = utf8only [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = AR #I'm on ARgentina countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Salta # i.e. the province I live on localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Your company name organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = Section Name. # eg. IT commonName = Common Name (e.g. server FQDN or YOUR name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] basicConstraints=CA:FALSE nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = CA:true [ crl_ext ] authorityKeyIdentifier=keyid:always [ proxy_cert_ext ] basicConstraints=CA:FALSE nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # This really needs to be in place for it to be a proxy certificate. proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo [ tsa ] default_tsa = tsa_config1 # the default TSA section [ tsa_config1 ] # These are used by the TSA reply generation only. dir = ./demoCA # TSA root directory serial = $dir/tsaserial # The current serial number (mandatory) crypto_device = builtin # OpenSSL engine to use for signing signer_cert = $dir/tsacert.pem # The TSA signing certificate # (optional) certs = $dir/cacert.pem # Certificate chain to include in reply # (optional) signer_key = $dir/private/tsakey.pem # The TSA private key (optional) default_policy = tsa_policy1 # Policy if request did not specify it # (optional) other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) digests = md5, sha1 # Acceptable message digests (mandatory) accuracy = secs:1, millisecs:500, microsecs:100 # (optional) clock_precision_digits = 0 # number of digits after dot. (optional) ordering = yes # Is ordering defined for timestamps? # (optional, default: no) tsa_name = yes # Must the TSA name be included in the reply? # (optional, default: no) ess_cert_id_chain = no # Must the ESS cert id chain be included? # (optional, default: no)
Glosář
Než budeme pokračovat, malý glosář zkratek použitých v souboru:
- CA:znamená certifikační autoritu
- CRL:je zkratka pro Certificate Revocation Lists
- CSR:je zkratka pro Certificate Signing Request
- MD:je zkratka pro Message Digest
- TSA:znamená Time Stamping Authority
Úložiště certifikátů
Dále vytvořte adresáře a (zatím prázdné) soubory pro uložení našich klíčů a certifikátů:
# cd /var/openssl
# mkdir -p yourCA/CA
# mkdir -p yourCA/newcerts
# mkdir -p yourCA/certs/keys
# mkdir -p yourCA/certs/requests
# mkdir -p yourCA/certs/certificates
# cd yourCA
# touch index.txt
# echo 01 > serial
Certifikát CA
Nyní můžete vytvořit certifikát certifikačního úřadu a podepsat jej. Nejprve však musíme vytvořit soukromý klíč pomocí následujícího příkazu:
# /usr/local/bin/openssl genrsa -out yourCA/CA/yourCA.key 2048
Za druhé, vytvořte CSR spuštěním:
# /usr/local/bin/openssl req -new -key ./yourCA/CA/yourCA.key -out yourCA/CA/yourCA.csr
Postupujte podle pokynů na obrazovce a věnujte pozornost vyplnění správných informací. Nakonec svůj certifikát podepište sami:
# /usr/local/bin/openssl x509 -req -days 365 \
> -in yourCA/CA/yourCA.csr -out yourCA/CA/yourCA.crt \
> -signkey yourCA/CA/yourCA.key
A je to:nyní můžete začít podepisovat klientské nebo webové certifikáty
Klientské certifikáty
Proces je velmi podobný předchozímu. K podpisu klientského certifikátu však používáme náš certifikát CA. A v ideálním případě si klient vygeneruje vlastní soukromý klíč a CSR.
Každopádně věci jen testujeme, takže dělám každý krok a poté distribuuji vygenerované certifikáty svému uživateli. Následující příkazy lze spouštět kdekoli, ale abych zachoval pořádek, používám dříve vytvořené složky (pod /var/openssl/yourCA/certs ). Náš uživatel, John Doe, potřebuje nejprve soukromý klíč:
# cd /var/openssl/yourCA/certs
# /usr/local/bin/openssl genrsa -des3 -out keys/johndoe.key 2048
Nezapomeňte na přístupovou frázi, která bude několikrát dotázána; dále vytvořte žádost o podpis certifikátu:
# /usr/local/bin/openssl req -new -key keys/johndoe.key -out requests/johndoe.csr
Dále podepište certifikát tímto příkazem:
# /usr/local/bin/openssl ca -in requests/johndoe.csr -cert ../CA/yourCA.crt -keyfile ../CA/yourCA.key -out certificates/johndoe.crt
Nakonec exportujte certifikát do formátu PKCS12, budete požádáni o heslo PK:
# /usr/local/bin/openssl pkcs12 -export -clcerts -in certificates/johndoe.crt -inkey keys/johndoe.key -out certificates/johndoe.p12
Instalace certifikátu
Nyní můžete vydávat své vlastní certifikáty, které uživatel potřebuje k instalaci, aby jej mohl používat. Potřebujete doručit dva soubory:yourCA.crt a osobní johndoe.p12.
Chcete-li jej nainstalovat do systému Windows, použijte nástroj Správce certifikátů. Nenahrám několik screenshotů, protože moje okna jsou ve španělštině, nepovažoval bych to za příliš užitečné. Klikněte na nabídku Start a spusťte „certmgr.msc“, objeví se následující obrazovka:
Klikněte pravým tlačítkem myši na složku Kořenová certifikační autorita a zvolte „Importovat“. Začněte s yourCA.crt a vyberte kořenovou certifikační autoritu obchodu, postupujte podle průvodce.
Nyní klikněte pravým tlačítkem myši na složku Osobní a opakujte průvodce se souborem johndoe.p12. Budete požádáni o heslo. Po dokončení průvodce uvidíte nainstalovaný platný certifikát a podrobnosti:
Pamatujte, že toto je pouze pro účely učení. Ale to je také otázka důvěry. Pokud je vaše organizace dostatečně malá a existuje důvěra, měli byste být schopni pracovat s těmito certifikáty pro vlastní potřebu.