Spis treści
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.
Nawet nie jest powiedziane w czym mam ten klucz wygenerować
klucz generujemy przy pomocy polecenia openssl w systemach Linuksowych (np. Ubuntu, Fedora).
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.
To zmieńcie tytuł i dopiszcie – pod Linuksem.
Zmieniać tytuł bo ktoś nie potrafi czytać ze zrozumieniem? W pierwszym akapicie są opisane potrzebne narzędzia.
Między słowem komputer, a Windows nie ma znaku równości… a nie zauważając tego jest się po prostu ignorantem.
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)
Zmieniać tytuł bo ktoś nie potrafi czytać ze zrozumieniem? W pierwszym akapicie są opisane potrzebne narzędzia.
Między słowem komputer, a Windows nie ma znaku równości… a nie zauważając tego jest się po prostu ignorantem.
Dobry artykuł, pozdrawiam! Wszystko działa, a tak btw to na widnowsa też jest dostępna kompilacja OPENSSL.