Spis treści 1. Root CA 2. Tworzenie pośredniego CA 3. Konfigurowanie pośredniego CA 4. Tworzenie certyfikatu użytkownika końcowego 5. Sprawdzenie certyfikatu Łatwy sposób dotyczący generowania urzędu certyfikacji (CA), pośrednich urzędów certyfikacji i certyfikatów końcowych przy użyciu OpenSSL. Obejmuje informacje o OCSP, CRL i CA Emitenta oraz o konkretnych datach ważności i terminach wygaśnięcia. Założymy nasze własne biuro główne. Używamy głównego urzędu certyfikacji do generowania przykładowego pośredniego urzędu certyfikacji. Użyjemy pośredniego urzędu certyfikacji do podpisywania certyfikatów użytkowników końcowych. Root CA Utwórz i przenieś się do folderu głównego ca: mkdir ~/SSLCA/root/ cd ~/SSLCA/root/ Wygeneruj 8192-bitowy klucz RSA SHA-256 dla naszego głównego urzędu certyfikacji: openssl genrsa -aes256 -out rootca.key 8192 Wynik dzialania: Generating RSA private key, 8192 bit long modulus...++......++ e is 65537 (0x10001) Jeśli chcesz zabezpieczyć hasłem ten klucz, dodaj opcję -aes256. Utwórz autentykowany certyfikat CA głównego ca.crt; Musisz podać tożsamość głównego urzędu certyfikacji: openssl req -sha256 -new -x509 -days 1826 -key rootca.key -out rootca.crt Przykładowy wynik: 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]:PL State or Province Name (full name) [Some-State]:mazowieckie Locality Name (eg, city) []:Warszawa Organization Name (eg, company) [Internet Widgits Pty Ltd]:Moja Nazwa Organizational Unit Name (eg, section) []:Przykładowa nazwa CA Common Name (e.g. server FQDN or YOUR name) []:Nazwa Root CA Email Address []: Utwórz kilka plików, w których CA będzie przechowywał swoje seriale: touch certindex echo 1000 > certserial echo 1000 > crlnumber Stwórz plik konfiguracyjny CA. Ten plik zawiera konfigurację dla punktów końcowych CRL i OCSP. # vim ca.conf [ ca ] default_ca = myca [ crl_ext ] issueraltname=issuer:copy authoritykeyidentifier=keyid:always [ myca ] dir =./ new_certs_dir = $dir unique_subject = no certificate = $dir/rootca.crt database = $dir/certindex private_key = $dir/rootca.key serial = $dir/certserial default_days = 730
default_md = sha256 policy = myca_policy x509_extensions = myca_extensions crlnumber = $dir/crlnumber default_crl_days = 730 [ myca_policy ] commonname = supplied stateorprovincename = supplied countryname = optional emailaddress = optional organizationname = supplied organizationalunitname = optional [ myca_extensions ] basicconstraints = critical,ca:true keyusage = critical,any subjectkeyidentifier = hash authoritykeyidentifier = keyid:always,issuer keyusage = digitalsignature,keyencipherment,crlsign,keycertsign extendedkeyusage = serverauth crldistributionpoints = @crl_section subjectaltname = @alt_names authorityinfoaccess = @ocsp_section [ v3_ca ] basicconstraints = critical,ca:true,pathlen:0 keyusage = critical,any subjectkeyidentifier = hash authoritykeyidentifier = keyid:always,issuer keyusage = digitalsignature,keyencipherment,crlsign,keycertsign extendedkeyusage = serverauth crldistributionpoints = @crl_section subjectaltname = @alt_names authorityinfoaccess = @ocsp_section
[alt_names] DNS.0 = Sparkling Intermidiate CA 1 DNS.1 = Sparkling CA Intermidiate 1 [crl_section] URI.0 = http://pki.przykladowy.pl/sparklingroot.crl URI.1 = http://pki.backup.przykladowy.pl/sparklingroot.crl [ocsp_section] caissuers;uri.0 = http://pki.przykladowy.pl/sparklingroot.crt caissuers;uri.1 = http://pki.backup.przykladowy.pl/sparklingroot.crt OCSP;URI.0 = http://pki.przykladowy.pl/ocsp/ OCSP;URI.1 = http://pki.backup.przykladowy.pl/ocsp/ Jeśli musisz ustawić konkretny początek / termin ważności certyfikatu, dodaj następujące pozycje do [myca] # format: YYYYMMDDHHMMSS default_enddate = 20191222035911 default_startdate = 20181222035911 Tworzenie Pośredniego CA Wygeneruj klucz prywatny pośredniego urzędu certyfikacji: openssl genrsa -out intermediate1.key 4096 Wytworzenie wniosku CSR pośredniego CA: openssl req -new -sha256 -key intermediate1.key -out intermediate1.csr Przykładowy wynik: 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]:PL State or Province Name (full name) [Some-State]:mazowieckie Locality Name (eg, city) []:Warszawa Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nazwa pośredniego CA Organizational Unit Name (eg, section) []:Skrócona nazwa pośredniego CA Common Name (e.g. server FQDN or YOUR name) []:Nazwa wyświetlana pośredniego CA Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Upewnij się, że podmiot (CN) różni się od głównego. Podpisanie pośredniego CSR ze źródłem informacji w pliku ca.conf: openssl ca -batch -config ca.conf -notext -in intermediate1.csr -out intermediate1.crt Przykładowy wynik: Using configuration from ca.conf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryname stateorprovincename localityname :PRINTABLE:'PL' :ASN.1 12:'mazowieckie' :ASN.1 12:'Warszawa' organizationname :ASN.1 12:'Nazwa pośredniego CA' organizationalunitname:asn.1 12:'Skrócona nazwa pośredniego CA' commonname :ASN.1 12:'Nazwa wyświetlana pośredniego CA' Certificate is to be certified until Mar 30 15:07:43 2017 GMT (730 days) Write out database with 1 new entries Data Base Updated Tworzenie CRL (dla PEM oraz DER): openssl ca -config ca.conf -gencrl -keyfile rootca.key -cert rootca.crt -out rootca.crl.pem
openssl crl -inform PEM -in rootca.crl.pem -outform DER -out rootca.crl Wygeneruj CRL po każdym podpisaniu certyfikatu w urzędzie certyfikacji jeśli kiedykolwiek musisz cofnąć ten pośredni certyfikat: openssl ca -config ca.conf -revoke intermediate1.crt -keyfile rootca.key -cert rootca.crt Konfigurowanie pośredniego CA Utwórz nowy folder dla tego pośrednika i przejdź do niego: mkdir ~/SSLCA/intermediate1/ cd ~/SSLCA/intermediate1/ Skopiuj certyfikat pośredni i klucz z głównego urzędu certyfikacji: cp ~/SSLCA/root/intermediate1.key./ cp ~/SSLCA/root/intermediate1.crt./ Utwórz pliki indeksu: touch certindex echo 1000 > certserial echo 1000 > crlnumber Stwórz nowy plik ca.conf: # vim ca.conf [ ca ] default_ca = myca [ crl_ext ] issueraltname=issuer:copy authoritykeyidentifier=keyid:always [ myca ] dir =./ new_certs_dir = $dir unique_subject = no certificate = $dir/intermediate1.crt database = $dir/certindex
private_key = $dir/intermediate1.key serial = $dir/certserial default_days = 365 default_md = sha256 policy = myca_policy x509_extensions = myca_extensions crlnumber = $dir/crlnumber default_crl_days = 365 [ myca_policy ] commonname = supplied stateorprovincename = supplied countryname = optional emailaddress = optional organizationname = supplied organizationalunitname = optional [ myca_extensions ] basicconstraints = critical,ca:false keyusage = critical,any subjectkeyidentifier = hash authoritykeyidentifier = keyid:always,issuer keyusage = digitalsignature,keyencipherment extendedkeyusage = serverauth crldistributionpoints = @crl_section subjectaltname = @alt_names authorityinfoaccess = @ocsp_section [alt_names] DNS.0 = przykladowy.pl DNS.1 = przykladowy.org [crl_section] URI.0 = http://pki.przykladowy.pl/sparklingintermidiate1.crl URI.1 = http://pki.przykladowy.org/sparklingintermidiate1.crl
[ocsp_section] caissuers;uri.0 = http://pki.przykladowy.pl/sparklingintermediate1.crt caissuers;uri.1 = http://pki.przykladowy.org/sparklingintermediate1.crt OCSP;URI.0 = http://pki.przykladowy.pl/ocsp/ OCSP;URI.1 = http://pki.backup.przykladowy.pl/ocsp/ Zmień w sekcji [alt_names] DNS na właściwe używane przez ciebie. Jeśli musisz ustawić konkretny początek / termin ważności certyfikatu, dodaj następujące pozycje do [myca] # format: YYYYMMDDHHMMSS default_enddate = 20191222035911 default_startdate = 20181222035911 Wygeneruj pusty CRL (zarówno w PEM, jak i DER): openssl ca -config ca.conf -gencrl -keyfile rootca.key -cert rootca.crt -out rootca.crl.pem openssl crl -inform PEM -in rootca.crl.pem -outform DER -out rootca.crl Tworzenie certyfikatów użytkownika końcowego Używamy tego nowego pośredniego urzędu certyfikacji w celu wygenerowania certyfikatu użytkownika końcowego. Powtórz te czynności dla każdego certyfikatu użytkownika końcowego, który chcesz podpisać w tym urzędzie certyfikacji. mkdir enduser-certs Wygeneruj klucz prywatny użytkownika końcowego: openssl genrsa -out enduser-certs/enduser-example.com.key 4096 Generowanie wniosku CSR: openssl req -new -sha256 -key enduser-certs/enduser-example.com.key -out endusercerts/enduser-example.com.csr Przykładowy wynik: 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]:PL State or Province Name (full name) [Some-State]:mazowieckie Locality Name (eg, city) []:Warszawa Organization Name (eg, company) [Internet Widgits Pty Ltd]:Moja firma Organizational Unit Name (eg, section) []:Oddzial Common Name (e.g. server FQDN or YOUR name) []:przykladowy.pl Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Podpisz CSR użytkownika koń cowego za poś rednictwem pośredniego CA: openssl ca -batch -config ca.conf -notext -in enduser-certs/enduserexample.com.csr -out enduser-certs/enduser-example.com.crt Przykladowy wynik: Using configuration from ca.conf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryname stateorprovincename localityname organizationname :PRINTABLE:'PL' :ASN.1 12:'mazowieckie' :ASN.1 12:'Warszawa' :ASN.1 12:'Moja firma' organizationalunitname:asn.1 12:'Oddzial' commonname :ASN.1 12:'przykladowy.pl' Certificate is to be certified until Mar 30 15:18:26 2016 GMT (365 days) Write out database with 1 new entries Data Base Updated
Wygeneruj CRL (zarówno w PEM, jak i DER): openssl ca -config ca.conf -gencrl -keyfile intermediate1.key -cert intermediate1.crt -out intermediate1.crl.pem openssl crl -inform PEM -in intermediate1.crl.pem -outform DER -out intermediate1.crl Wygeneruj CRL po każdym podpisaniu certyfikatu w urzędzie certyfikacji jeśli kiedykolwiek musisz cofnąć certyfikat użytkownika: openssl ca -config ca.conf -revoke enduser-certs/enduser-example.com.crt -keyfile intermediate1.key -cert intermediate1.crt Przykładowy wynik: Using configuration from ca.conf Revoking Certificate 1000. Data Base Updated Utwórz plik certyfikatu łańcucha certyfikacyjnego, łącząc ze sobą certyfikaty Root i intermediate 1. Jeżeli umieścimy ten zespolony certyfikat na serwerze to nie musimy instalować certyfikatu pośrednika w komputerze. cat../root/rootca.crt intermediate1.crt > enduser-certs/enduser-example.com.chain Wyślij następujące pliki do użytkownika końcowego: enduser-example.com.crt enduser-example.com.key enduser-example.com.chain Możesz także pozwolić użytkownikowi końcowi dostarczyć własne CSR i po prostu wysłać je do pliku.crt. Nie usuwaj tego z serwera, w przeciwnym razie nie będziesz mógł go wycofać. Sprawdzenie certyfikatu Certyfikat końcowego użytkownika można sprawdzić za pomocą następującego polecenia: openssl verify -CAfile enduser-certs/enduser-example.com.chain endusercerts/enduser-example.com.crt enduser-certs/enduser-example.com.crt: OK Można również sprawdzić jego poprawność względem listy CRL. Łącz najpierw PEM CRL i łańcuch w pierwszej kolejności: cat../root/rootca.crt intermediate1.crt intermediate1.crl.pem > endusercerts/enduser-example.com.crl.chain Zweryfikuj certyfikat:
openssl verify -crl_check -CAfile enduser-certs/enduser-example.com.crl.chain enduser-certs/enduser-example.com.crt Wynik gdy certyfikat nie jest odwolany enduser-certs/enduser-example.com.crt: OK Wynik w przypadku odwolania: enduser-certs/enduser-example.com.crt: CN = przykladowy.pl, ST = mazowieckie, C = PL, O = Moja firma, OU = Oddzial error 23 at 0 depth lookup:certificate revoked