Warning: Memcache::addserver() expects parameter 2 to be long, string given in /usr/home/rpc/domains/rpc.one.pl/public_html/libraries/joomla/cache/storage/memcache.php on line 84 Generowanie certyfikatów openssl x509
 
 
Generowanie certyfikatów openssl x509 Drukuj Email
Wpisany przez rpc   
poniedziałek, 26 października 2009 22:41

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

 

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: adres_mail@vpn.dyndns.org

 

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
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 []:adres_mail@vpn.dyndns.org

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              = adres_mail@vpn.dyndns.org
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/emailAddress=adres_mail@vpn.dyndns.org
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.

 

 




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:
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 []:adres_mail@vpn.dyndns.org

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              = adres_mail@vpn.dyndns.org
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/emailAddress=adres_mail@vpn.dyndns.org
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


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
Email Address []:adres_mail@vpn.dyndns.org

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              = adres_mail@vpn.dyndns.org
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/emailAddress=adres_mail@vpn.dyndns.org
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
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.


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 []:adres_mail@vpn.dyndns.org

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
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              = adres_mail@vpn.dyndns.org
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


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
........................++++++
........................++++++
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 []:adres_mail@vpn.dyndns.org

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:
countryName               = PL
stateOrProvinceName       = Mazowieckie
localityName              = Warszawa
organizationName          = Firma Sp. z o.o.
organizationalUnitName    = Firma
commonName                = iyy99.internetdsl.tpnet.pl
emailAddress              = adres_mail@vpn.dyndns.org
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
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

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/ssl/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ć:

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

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

.



Podziel się tą informacja z innymi:
Poprawiony: wtorek, 18 stycznia 2011 19:00