OpenSSL – Tworzenie certyfikatu, edycja, narzędzia pomocnicze

OpenSSL to potężne narzędzie pozwalające na zarządzacnie certyfikatami, stworzenie własnego centrum autoryzacji itp.

Aby było łatwiej

Zmiana wartości domyślnych dla generowanych certyfikatów

Tworzenie nowych certyfikatów możemy sobie ułatwić zmieniając domyślne wartości pól przez co będziemy mieli mniej pracy.

Plik konfiguracyjny dla Openssla to /usr/lib/ssl/openssl.conf. Mniej więcej w połowie pliku znajduje się początek domyślnych ustawień. Możesz spokojnie zmienić nazwę kraju (countryName_default), województwa (stateOrProvinceName_default), nazwę firmy lub organizacji (0.organizationName_default) i nazwę działu (0.organizationName_default)

Zobacz też /etc/pki/tls/openssl.cnf.

Tworzenie nowego certyfikatu – droga manualna i długa

Generowanie nowego certyfikatu CA

1. Stworzenie nowego prywatnego klucza (1024 bity potrójne zakodowy przy pomocy algorytmu DES)

Wskazówka: nie używaj polskich liter przy tworzeniu certyfikatu.

openssl genrsa -des3 -out ca.key 1024

Po zakończeniu procedury w bieżącym katalogu pojawi się plik ca.key z kluczem naszego Centrum Autoryzacji. Klucz ten będzie zawierał hasło.

2. Wygenerowanie samopodpisanego klucza w strukturze X509

Podczas tworzenia certyfikatu (klucza) zostaniemy poproszeni o podanie danych dotyczących jego właściciela takich jak: państwo, region (województwo) oraz miasto w którym się znajduje wystawca, common name gdzie warto wstawić adres serwera wystawcy oraz email osoby do kontaktu.

openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Generowanie certyfikatu usługi (witryny)

1. Wygenerowanie klucza serwera (usługi)

openssl genrsa -des3 -out server.key 1024

Po wykonaniu tej czynności w bieżącym katalogu pojawi się plik server.key

2. Wygenerowanie prośby o podpisanie klucza (request). W czasie wprowadzania „CommonName” wprowadź pełny adres serwisu.

openssl req -new -key server.key -out server.csr

Po wykonaniu tej czynności w w bieżącym katalogu pojawi się plik server.scr

Podpisanie prośby o certifikację certyfikatu klienta

Wykorzystanie skryptu sign.sh rozprowadzanego z pakietem mod_ssl (w dystrybucji Debian jest to pakiet libapache-mod-ssl z z wersji non-US) pozwala w łatwy sposób podpisywać prośby o certyfikacje. Jako parametr należy podać nazwę pliku w którym została ona zawarta.

$ ./sign.sh server.csr

Przebieg procedury będzie podobny do poniżej:

[root@localhost ssl]# ./sign.sh server.csr
CA signing: server.csr -> server.crt:
Using configuration from ca.config
Enter pass phrase for ./ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'PL'
stateOrProvinceName   :PRINTABLE:'Lodz'
localityName          :PRINTABLE:'Lodz'
organizationName      :PRINTABLE:'XSoft'
organizationalUnitName:PRINTABLE:'Dzial technologi Open-Source'
commonName            :PRINTABLE:'www.pingwin.cert.pl'
emailAddress          :IA5STRING:'ziutus@www.pingwin.wirt.pl'
Certificate is to be certified until May 29 05:57:41 2004 GMT (365 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
CA verifying: server.crt <-> CA cert
server.crt: OK

Po wykonaniu tego polecenia w pliku server.crt znajdzie się podpisany certyfikat.

Stworzenie samo podpisanego certyfikatu

Często możemy sami podpisać sobie certyfikat, wtedy można wszystko rozwiazać jedna komenda, np (podmieniajac katalog i nazwe pliku):

openssl req -new -x509 -days 365 -nodes -out /etc/ssl/webserver/apache.pem -keyout /etc/ssl/webserver/apache.key

Oglądanie własności certyfikatów

Oglądanie klucza

openssl rsa -noout -text -in server.key

Oglądanie requestu

openssl req -noout -text -in server.csr

Oglądanie certyfikatu

openssl x509 -noout -text -in server.crt

Modyfikacje certyfikatów

Usunięcia hasła certyfikatu

cp server.key server.key.org
 openssl rsa -in server.key.org -out server.key
 chmod 400 server.key

Zmiana hasła certyfikatu

$ openssl rsa -des3 -in server.key -out server.key.new
$ mv server.key.new server.key

Korzystanie z skryptów pomocniczych

W katalogu /usr/lib/ssl/misc znajduje się kilka przydatnych skryptów pozwalających zautomatyzować tworzenie nowych certyfikatów. Jednym z nich jest CA.pl.

Wykorzystanie skryptu CA.pl

Tworzenie nowego certyfikatu CA

Nowy certyfikat CA tworzymy wydając proste polecenie CA.pl z parametrem -newca

[root@localhost ssl]# /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]:Lodz
Locality Name (eg, city) []:Lodz
Organization Name (eg, company) [Internet Widgits Pty Ltd]:XSoft
Organizational Unit Name (eg, section) []:Dzial Linuksowy
Common Name (eg, YOUR name) []:www.pingwin.wirt.pl
Email Address []:admin@www.pingwin.wirt.pl

Tworzenie certyfikatu strony

Wygenerujemy teraz prośbę o podisanie certyfikatu:

/usr/lib/ssl/misc/CA.pl -newreq

W wyniku tego powstanie plik w bieżącym katalogu o nazwie newreq.pem. Zawierać będzie on prywatny klucz serwera (który nam za moment się przyda) oraz prośbę o podpisanie tego klucza.

Teraz prośbę tą należy podpisać:

/usr/lib/ssl/misc/CA.pl -sign

Podpisany certyfikat wraz z jego opisem będzie znajdował się w bieżącym katalogu w pliku newcert.pem.

Pozostaje nam przekopiować nam certyfikat serwera do pliku certyfikatu wymaganego przez program oraz klucz serwera do pliku klucza serwera. Przykładowo dla serwera Apache2 w dystrybucji Mandrake należy klucz dla niego umieścić w pliku /etc/ssl/apache/sever.key a certyfikat w pliku /etc/ssl/apache/server.crt

Certyfikaty klienckie – krótko

/usr/lib/ssl/misc/CA.pl -newreq
 /usr/lib/ssl/misc/CA.pl -sign

openssl pkcs12 -export -in newcert.pem -inkey newreq.pem \
	-certfile demoCA/cacert.pem -name "Name" -out newcert.p12

SSL i Apache2.x

Twórcy Apache 2.x opracowali skrypt pozwalający za jednym zamachem stworzyć samopodpisany certyfikat SSL. Skrypt ten nazywa się gentestcrt.sh i najduje się w katalogu /usr/lib/ssl/apache2-mod_ssl

SSL i dovecot

Pakiet dovecot zawiera prosty skrypt mający znacznie ułatwić konfigurację pakietu z certyfikatami SSL. Należy napierw wyedytować plik konfiguracyjny /etc/pki/dovecot/dovecot-openssl.cnf.

Następnie należy użyć skryptu mkcert.sh (przykładowa lokalizacja /usr/share/doc/dovecot-1.0.7/examples), który utworzy certyfikaty.

[root@centos examples]# ./mkcert.sh 
Generating a 1024 bit RSA private key
.............................++++++
....++++++
writing new private key to '/etc/pki/dovecot/private/dovecot.pem'
-----

subject= /C=PL/ST=Lodz/L=Lodz/O=LinuxExpert.PL/OU=servers/CN=*.linuxexpert.pl/emailAddress=admin@linuxexpert.pl
SHA1 Fingerprint=98:34:4D:C2:AD:D7:77:0D:92:72:ED:0A:BD:6D:33:42:6B:A1:A4:23

Stunnel

Przy instalacji programu stunnelw wersji 4.04 można zauważyć, iż skrypt instalacyjny wykonuje (lub próbuje wykonać) następujące polecenie:

openssl req -new -x509 -days 365 -nodes \
    -config /usr/share/doc/stunnel-4.04/stunnel.cnf \
    -out /etc/ssl/stunnel/stunnel.pem -keyout /etc/ssl/stunnel/stunnel.pem

Użyty tutaj plik konfiguracyjny (przy opcji -config) ma postać:

# create RSA certs - Server

RANDFILE = stunnel.rnd

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type

[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default             = PL
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Some-State

localityName                    = Locality Name (eg, city)

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Stunnel Developers Ltd

organizationalUnitName          = Organizational Unit Name (eg, section)
#organizationalUnitName_default =

0.commonName                    = Common Name (FQDN of your server)
0.commonName_default            = localhost

# To create a certificate for more than one name uncomment:
# 1.commonName                  = DNS alias of your server
# 2.commonName                  = DNS alias of your server
# ...
# See http://home.netscape.com/eng/security/ssl_2.0_certificate.html
# to see how Netscape understands commonName.

[ cert_type ]
nsCertType = server

Po wykonaniu polecenia zaprezentowanego powyżej nastąpi procedura generacji certyfikatu oraz klucza za jednym zamachem zgodnie z plikiem ustawień. Pozwala to uzyskać jeszcze prostszy sposób tworzenia certyfikatów :).

Dokumentacja w sieci

Więcej informacji na temat SSLa OpenSSLa i tworzenia certyfikatów znajdziesz na stronach:

Dodaj komentarz