Generowanie własnego certyfikatu SSL

W tym wpisie opiszemy jak stworzyć klucz oraz CSR w systemie Linux (żądanie certyfikatu – Certificate signing request), następnie przy ich użyciu wygenerować certyfikat SSL oraz jak skonfigurować w apache wirtualnego hosta z włączoną obsługą SSL. Mimo, że własnoręcznie podpisany certyfikat, powoduje wyświetlanie ostrzeżeń w przeglądarkach, wciąż zapewnia nam takie same bezpieczeństwo transmisji jak certyfikat wystawiony przez autoryzowaną jednostkę.

Generowanie Klucza

W pierwszym kroku utworzymy 4096 bitowy klucz, szyfrowany algorytmem DES. Użyjemy do tego polecenia openssl:

openssl genrsa -des3 -out tech-itcore.pl.key 4096
Generating RSA private key, 4096 bit long modulus
.............................++
................++
e is 65537 (0x10001)
Enter pass phrase for tech-itcore.pl:
Verifying - Enter pass phrase for tech-itcore.pl:

Musimy też podać hasło do klucza. Dzięki temu nawet po zgubieniu klucza, bez znajomości hasła jest on bezużyteczny.

Generowanie CSR

Następnie musimy utworzyć tzw CSR, czyli żądanie wydania certyfikatu. Tym razem będziemy musieli podać kilka danych, takich jak adres email, kraj, nazwa domeny etc. Informacje te widoczne będą później dla innych użytkowników w przeglądarce. Jeżeli certyfikatu będziemy używać tylko dla własnych potrzeb nie ma większego znaczenia co tutaj wpiszemy.

openssl req -new -key tech-itcore.pl.key -out tech-itcore.pl.csr
Enter pass phrase for tech-itcore.pl.key:
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) [GB]:PL
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Newbury]:miasto
Organization Name (eg, company) [My Company Ltd]:ITCore
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:tech-itcore.pl
Email Address []:twoj@adres.mail

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Warto zwrócić uwagę na to co wpisujemy w sekcji Common Name. Podajemy tutaj domenę, dla której będzie wystawiony certyfikat. Dlatego zamawiając/kupując autoryzowany certyfikat, musimy podać poprawną domenę. Jeżeli popełnimy tutaj błąd (literówka, zła domena, subdomena etc), wtedy w przeglądarce zobaczymy ostrzeżenie.

Generowanie Certyfikatu SSL

Mając już klucz oraz plik CSR możemy utworzyć certyfikat

openssl x509 -req -days 730 -in tech-itcore.pl.csr  -signkey tech-itcore.pl.key -out tech-itcore.pl.crt
Signature ok
subject=/C=PL/ST=Berkshire/L=miasto/O=ITCore/OU=IT/CN=tech-itcore.pl/emailAddress=twoj@adres.mail
Getting Private key
Enter pass phrase for tech-itcore.pl.key:

Certyfikat będzie ważny przez 2 lata (days 730). Możemy też sprawdzić czy wszystkie dane w certyfikacie są poprawne wpisując:

openssl x509 -in tech-itcore.pl.crt -noout -text
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            82:c4:29:19:81:7f:6d:04
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=PL, ST=Berkshire, L=miasto, O=ITCore, OU=IT, CN=tech-itcore.pl/emailAddress=twoj@adres.mail
        Validity
            Not Before: Jul  4 09:26:58 2012 GMT
            Not After : Jul  4 09:26:58 2014 GMT
        Subject: C=PL, ST=Berkshire, L=miasto, O=ITCore, OU=IT, CN=tech-itcore.pl/emailAddress=twoj@adres.mail
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (4096 bit)
                Modulus (4096 bit):
                    00:a9:79:82:ef:58:0a:e2:90:eb:6c:a6:fa:ea:b4:
                    56:7b:40:33:66:88:bb:da:f3:65:be:45:65:b7:46:
                    a5:74:8f:57:4d:f4:08:6d:dd:c1:e8:38:58:1a:a1:
....

Podobnie z plikiem CSR:

openssl req -in tech-itcore.pl.csr -text -noout
Certificate Request:
   Data:
        Version: 0 (0x0)
        Subject: C=PL, ST=Berkshire, L=miasto, O=ITCore, OU=IT, CN=tech-itcore.pl/emailAddress=twoj@adres.mail
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (4096 bit)
                Modulus (4096 bit):

Usuwanie hasła z klucza

Tak jak wcześniej wspomnieliśmy, nasz klucz jest zabezpieczony hasłem. Może to być problematyczne, ponieważ przy każdym restarcie daemona httpd będziemy zmuszeni do wpisywania hasła.

openssl rsa -in tech-itcore.pl.key -out tech-itcore.pl.key-bezhasla
Enter pass phrase for tech-itcore.pl.key:
writing RSA key

Konfiguracja SSL w apache

Ostatnim krokiem jest stworzenie wirtualnego hosta, który będzie mieć włączoną obsługę SSL. Przekopiujemy najpierw nasz klucz i certyfikat do katalogu /etc/pki/tls (system CentOS)

cp tech-itcore.pl.crt /etc/pki/tls/certs/
cp tech-itcore.pl.key /etc/pki/tls/private/

Zakładając, że nasz plik vhost nazywa się tech-itcore.pl.conf, w pliku httpd.conf wpisujemy:

LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
Include /etc/httpd/conf/tech-itcore.pl.conf

Oraz dodajemy odpowiednią sekcję w pliku wirtualnego hosta:

<VirtualHost 196.164.2.102:443>
ServerName tech-itcore.pl
...
<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/tech-itcore.pl.crt
SSLCertificateKeyFile /etc/pki/tls/private/tech-itcore.pl.key
</IfModule>
...

Po wszystkim wystarczy zrestartować serwer www:

/etc/init.d/httpd restart
Stopping httpd:                           [  OK  ]
Starting httpd:                           [  OK  ]

Nasz serwer powinien teraz nasłuchiwać na porcie 443:

ss -anp | grep 443
LISTEN     0      0           :::443         :::*      users:(("httpd",15674,8),("httpd",25589,8)

Możemy też sprawdzić połączenie z serwerem używając ponownie polecenia openssl:

openssl s_client -connect itcore.com.pl:443

Lub prościej, po prostu użyć przeglądarki.

  1. Nawet nie jest powiedziane w czym mam ten klucz wygenerować

  2. A jak ktoś ma Windows? Wpis od d… strony wzięty.

    • w tym przypadku korzysta z narzędzi dostępnych pod Windowsem. Tutaj skupiamy się na openssl w Linuksie. Nie opisujemy też jak wygenerować certyfikat w IOS, Amidze, C-64, na Arduino oraz Gameboy’u.

    • @Georg od dupy wzięty to jest Twój wpis. Kto w ogóle robi SSL na Apache w Windows? Jeśli serwer z Apache to tylko Linux! Każde inne rozwiązanie to jakaś chora proteza.

  3. To zmieńcie tytuł i dopiszcie – pod Linuksem.

  4. Tomasz Root

    To jest dramat PL Internetu… Brak myślenia i pouczenia co wykonać autor postu. A może @Georg pora zacząć zmieniać świat od samego siebie i za każdym razem w szukanej frazie dopisywać +windows?
    Wpis bardzo przydatny i całościowo opisuje zagadnienie +usunięcie hasła (to ważne)

Zostaw komentarz


Podpowiedź - możesz użyć tych HTML tagów i atrybutów:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Obraz CAPTCHY

*

Trackback'i i Pingback'i: