Generowanie certyfikatów openssl x509
Transkrypt
Generowanie certyfikatów openssl x509
Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Generowanie certyfikatów openssl x509 W debianie należy zainstalować sobie pakiet openssl apt-get install openssl W openwrt należy zainstalować sobie pakiet openssl-util opkg install libopenssl openssl-util Jednakże jeśli chodzi o openwrt należy sie mała uwaga. Zainstalowany jest podstawowy pakiet bez skryptów. Plik openssl.cnf jest umiesczony w /etc/ssl/openssl.cnf. Skrypty są poniżej możesz sobie pobrać i wykorzystać w openwrt lub przeanalizowac i wyciągnąć odpowiednie komendy. Plik shellowy zmodyfikowałem troszkę tak, że teraz ma te same funkcje co perlowy. Do pobrania CA.sh . Można go teraz używać jako zamiennik CA.pl 1 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Założenia Nazwa dns naszego servera np. apache, openvpn, exim: vpn.dyndns.org Nazwa dns naszego clienta : iyy99.internetdsl.tpnet.pl Nazwa e-mail naszego clienta: [email protected] Jeśli chcesz aby certyfikat był ważny dłużej niż 1 rok (365dni) to zmień poniższy parametr np. na: default_days=3650 w pliku /usr/lib/ssl/openssl.cnf W/w plik jest linkiem symbolicznym do pliku /etc/ssl/openssl.cnf 1. Tworzenie własnego centrum certyfikacji PKI Przechodzimy do katalogu cd /usr/lib/ssl/misc 2 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 i wykonujemy komendę: ./CA.pl -newca debian:/usr/lib/ssl/misc# ./CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key ....++++++ .++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----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]:Firma Sp. z o.o. Organizational Unit Name (eg, section) []:Firma Common Name (eg, YOUR name) []:Firma ROOT CA Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: e4:52:49:85:36:f1:5c:87 3 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Validity Not Before: Oct 26 18:51:43 2009 GMT Not After : Oct 25 18:51:43 2012 GMT Subject: countryName = PL stateOrProvinceName = Mazowieckie organizationName = Firma Sp. z o.o. organizationalUnitName = Firma commonName = Firma ROOT CA emailAddress = [email protected] X509v3 extensions: X509v3 Subject Key Identifier: FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 X509v3 Authority Key Identifier: keyid:FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 DirName:/C=PL/ST=Mazowieckie/O=Firma Sp. z o.o./OU=Firma/CN=Firma ROOT CA/[email protected] serial:E4:52:49:85:36:F1:5C:87 X509v3 Basic Constraints: CA:TRUE Certificate is to be certified until Oct 25 18:51:43 2012 GMT (1095 days) Write out database with 1 new entries Data Base Updated W wyniku wykonania w/w komendy zostanie utworzony katalog demoCA. Zawartością będzie minnymi klucz prywatny (w katalogu private) musisz go pilnować i nikomu nie wolno udostępniać. Możemy przygotować sobie plik der do wczytania do przeglądarek IE, Firefox poniższym poleceniem: openssl x509 -setalias "Firma Sp. z o.o. Root CA" -outform DER -in demoCA/cacert.pem -out cacert.der Plikiem cacert.der informujesz przeglądarki, iż dla później wygenerowanych certyfikatów i podpisanych przez nasze CA o tym, że ty jesteś dla tych certyfikatów centrum certyfikacji. Wtedy przeglądarki nie będą się buntowały. Musisz zainstalować plik cacert.der jako zaufane centrum certyfikacji w swojej przeglądarce. 4 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 2. Tworzenie certyfikatu serwera np. apacha, openvpn, exim. Edytujemy plik vi /usr/lib/ssl/openssl.conf szukamy wiersza : nsCertType w sekcji [usr_cert] i ustawiamy (odremowujemy) wartość server czyli nsCertType = server inne wiersze z nsCertType mają być zaremowane Wywołujemy komendę: ./CA.pl -newreq-nodes mała uwaga dodajemy nodes ponieważ niechcemy aby serwer np. apach, openvpn czy exim w czasie uruchomienia pytał się o hasło (jeśli jednak chcemy to wystarczy tylko -newreq) Zwróć uwagę na pole Common Name. Ważne aby to była nazwa DNS serwera debian:/usr/lib/ssl/misc# ./CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key ....++++++ .++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: 5 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Verifying - Enter PEM pass phrase: ----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]:Firma Sp. z o.o. Organizational Unit Name (eg, section) []:Firma Common Name (eg, YOUR name) []:Firma ROOT CA Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: e4:52:49:85:36:f1:5c:87 Validity Not Before: Oct 26 18:51:43 2009 GMT Not After : Oct 25 18:51:43 2012 GMT Subject: countryName = PL stateOrProvinceName = Mazowieckie organizationName = Firma Sp. z o.o. organizationalUnitName = Firma commonName = Firma ROOT CA emailAddress = [email protected] X509v3 extensions: X509v3 Subject Key Identifier: FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 X509v3 Authority Key Identifier: keyid:FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 DirName:/C=PL/ST=Mazowieckie/O=Firma Sp. z o.o./OU=Firma/CN=Firma ROOT CA/[email protected] serial:E4:52:49:85:36:F1:5C:87 6 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 X509v3 Basic Constraints: CA:TRUE Certificate is to be certified until Oct 25 18:51:43 2012 GMT (1095 days) Write out database with 1 new entries Data Base Updated Podpisywanie wyżej wygenerowanego certyfikatu serwera wywołujemy komendę ./CA.pl -sign po wywołaniu podajemy hasło nadane podczas tworzenia centrum certyfikacji PKI CA i potwierdzamy. Potem na dwa pytania odpowiadamy "y" czyli zgadzamy się. Wynik wywołania polecenia wygląda następująco: debian:/usr/lib/ssl/misc# ./CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key ....++++++ .++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----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]:Firma Sp. z o.o. Organizational Unit Name (eg, section) []:Firma Common Name (eg, YOUR name) []:Firma ROOT CA 7 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: e4:52:49:85:36:f1:5c:87 Validity Not Before: Oct 26 18:51:43 2009 GMT Not After : Oct 25 18:51:43 2012 GMT Subject: countryName = PL stateOrProvinceName = Mazowieckie organizationName = Firma Sp. z o.o. organizationalUnitName = Firma commonName = Firma ROOT CA emailAddress = [email protected] X509v3 extensions: X509v3 Subject Key Identifier: FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 X509v3 Authority Key Identifier: keyid:FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 DirName:/C=PL/ST=Mazowieckie/O=Firma Sp. z o.o./OU=Firma/CN=Firma ROOT CA/[email protected] serial:E4:52:49:85:36:F1:5C:87 X509v3 Basic Constraints: CA:TRUE Certificate is to be certified until Oct 25 18:51:43 2012 GMT (1095 days) Write out database with 1 new entries Data Base Updated Pliki 8 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 newcert.pem - certyfikat publiczny newkey.pem - klucz prywatny certyfikatu newreq.pem - request to nasze wygenerowane pliki certyfikatu 3. Generowanie imiennego certyfikatu clienta np. dla openvpn, mail Edytujemy plik vi /usr/lib/ssl/openssl.conf szukamy wiersza : nsCertType w sekcji [usr_cert] i ustawiamy (odremowujemy) wartość client czyli nsCertType = client, email inne wiersze z nsCertType mają być zaremowane Wywołujemy komendę: ./CA.pl -newreq I podajemy hasło do certyfikatu imiennego usera któremu generujemy certyfikat Zwróć uwagę na pole Common Name. Ważne aby to była nazwa imię i nazwisko usera a w polu Email Address był prawdziwy adres e-mail usera. 9 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 debian:/usr/lib/ssl/misc# ./CA.pl -newreq Generating a 1024 bit RSA private key ...........++++++ ...........................++++++ writing new private key to 'newkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----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]:Firma Sp. z o.o. Organizational Unit Name (eg, section) []:Firma Common Name (eg, YOUR name) []:Imie i Nazwisko Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request is in newreq.pem, private key is in newkey.pem Podpisujemy certyfikat clienta: debian:/usr/lib/ssl/misc# ./CA.pl -sign Using configuration from /usr/lib/ssl/openssl.cnf 10 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: e4:52:49:85:36:f1:5c:89 Validity Not Before: Oct 26 19:06:45 2009 GMT Not After : Oct 24 19:06:45 2019 GMT Subject: countryName = PL stateOrProvinceName = Mazowieckie localityName = Warszawa organizationName = Firma Sp. z o.o. organizationalUnitName = Firma commonName = Imie i Nazwisko emailAddress = [email protected] X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 0E:52:58:81:AE:AC:19:A8:C4:79:60:C4:90:A2:CE:BF:9D:50:C5:DB X509v3 Authority Key Identifier: keyid:FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 Certificate is to be certified until Oct 24 19:06:45 2019 GMT (3650 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 Signed certificate is in newcert.pem Pliki newcert.pem - certyfikat publiczny newkey.pem - klucz prywatny certyfikatu newreq.pem - request to nasze wygenerowane pliki certyfikatu 11 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Jeśli chcemy mieć certyfikat w formie pkcs12 to wykonujemy jeszcze polecenie ./CA.pl -pkcs12 podajesz 2 razy hasło dostępu do pliku certyfikatu 4. Generowanie certyfikatu clienta dla np.routera - ipsec Edytujemy plik vi /usr/lib/ssl/openssl.conf szukamy wiersza : nsCertType w sekcji [usr_cert] i ustawiamy (odremowujemy) wartość client czyli nsCertType = client, email inne wiersze z nsCertType mają być zaremowane Zwróć uwagę na pole Common Name. Ważne aby to była nazwa DNS clienta Wywołujemy polecenie: ./CA.pl -newreq-nodes debian:/usr/lib/ssl/misc# ./CA.pl -newreq-nodes Generating a 1024 bit RSA private key 12 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 ........................++++++ ........................++++++ writing new private key to 'newkey.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]:PL State or Province Name (full name) [Some-State]:Mazowieckie Locality Name (eg, city) []:Warszawa Organization Name (eg, company) [Internet Widgits Pty Ltd]:Firma Sp. z o.o. Organizational Unit Name (eg, section) []:Firma Common Name (eg, YOUR name) []:iyy99.internetdsl.tpnet.pl Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request is in newreq.pem, private key is in newkey.pem i podpisujemy wyżej utworzony certyfikat (podając hasło centrum certyfikacji CA i dwa razy akceptując "y") debian:/usr/lib/ssl/misc# ./CA.pl -sign Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: e4:52:49:85:36:f1:5c:8a Validity Not Before: Oct 26 19:16:47 2009 GMT Not After : Oct 24 19:16:47 2019 GMT Subject: 13 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 countryName = PL stateOrProvinceName = Mazowieckie localityName = Warszawa organizationName = Firma Sp. z o.o. organizationalUnitName = Firma commonName = iyy99.internetdsl.tpnet.pl emailAddress = [email protected] X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 58:EB:7C:1A:C9:75:83:2B:BF:AA:E0:7E:DB:B4:0C:0B:53:8A:73:AA X509v3 Authority Key Identifier: keyid:FB:93:5A:14:F1:52:F2:77:A5:DB:70:DF:35:AE:DF:28:F9:40:CA:C1 Certificate is to be certified until Oct 24 19:16:47 2019 GMT (3650 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 Signed certificate is in newcert.pem Pliki newcert.pem - certyfikat publiczny newkey.pem - klucz prywatny certyfikatu newreq.pem - request to nasze wygenerowane pliki certyfikatu 5. Generowanie listy CRL - czyli lista certyfikatów unieważnionych 14 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 openssl ca -gencrl -out demoCA/crl/crl.pem openssl crl -in demoCA/crl/crl.pem -outform der -out demoCA/crl/cert.crl 6. Anulowanie ważności certyfikatu - potem wygeneruj nowe lsty CRL openssl ca -revoke userCert.pem 7. Polecenie podające sumę kontrolną certyfikatu publicznego openssl dgst certyfikat.publiczny Wynikiem polecenia może być: MD5(upstairs.public)= 78a3bddafb4d681c1ca8ed4d23da4ff1 Jeżeli nie korzystasz z list CRL w/w komenda pozwoli zweryfikować czy otrzymany certyfikat jest prawidłowy. 8.Konwersja certyfikatu z PEM->DER openssl x509 -in /usr/lib/ssl/demoCA/cacert.pem -inform PEM -out /usr/lib/ssl/demoCA/cacert.der -outform DER 15 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 Przyda się jeśli chcemy np. wczytać klucz do przeglądarki IE 9.Przykład wygenerowanych certyfikatów Wygenerowałem przykładowe certyfikaty. Możesz sobie je pobrać i obejrzeć. Wszędzie hasło to: certyfikat 10. Generowanie certyfikatów dla radius client i serwer Certyfikat dla radius server musi być odpowiednio przygotowany. Urząd wystawiający certyfikat MUSI w certyfikacie serwera dodać rozszerzenie TLS Web Server Authentication. W pliku /etc/s sl/openssl.cnf należy odremować wiersze lub jeśli ich nie ma utworzyć w sekcji [usr_cert]: nsCertType = server extendedKeyUsage = 1.3.6.1.5.5.7.3.1 Certyfikat dla clienta radius musi być odpowiednio przygotowany. Jeżeli używamy uwierzytelniania EAP-TLS klient musi się dysponować certyfikatem zawierającym rozszerzenie TLS Web Client Authentication. W pliku /etc/ssl/openssl.cnf należy odremować wiersze lub jeśli ich nie ma utworzyć: 16 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 nsCertType = client, email extendedKeyUsage = 1.3.6.1.5.5.7.3.2 11. Umieszczenie ścieżki CRL w certyfikacie Edytujemy plik /etc/ssl/openssl.cnf w sekcji [usr_cert] umieszczamy nsCaRevocationUrl = http://vpn.dyndns.org/crl/crl.pem co oznacza, iż lista crl znajduje się pod podanym adresem. Musimy pod podanym adresem na serwerze www umieścić aktualną listę crl.pem 12. Konwersja certyfikatu na format PKCS8 Możemy go sobie wygenerować następująco: openssl pkcs12 -in newcert.p12 -out certyfikat.pem openssl pkcs8 -topk8 -in certyfikat.pem -out newcert.p8 17 / 18 Generowanie certyfikatów openssl x509 Wpisany przez rpc poniedziałek, 26 października 2009 22:41 - Poprawiony wtorek, 18 stycznia 2011 19:00 lub z pliku prywatnego openssl pkcs8 -topk8 -nocrypt -in key.pem -inform PEM -out newkey.p8 14. Generowanie pliku (Diffie Hellman parameters). Plik może być potrzebny w openvpn czy w freeradius2 możemy go generować następująco: openvpn: openssl dhparam -out /etc/openvpn/dh1024.pem 1024 freeradius2: openssl dhparam -out /etc/certs/dh 1024 . 18 / 18