Generowanie i instalowanie certyfiaktu SSL na serwerze www nginx
W poprzednim artykule: Darmowe certyfikaty SSL opisałem gdzie można zdobyć darmowy a zarazem zaufany przez przeglądarki certyfikat SSL. Tym razem zajmiemy się częścią praktyczną czyli generowaniem i instalacją certyfikatu SSL dla naszej strony. Jako, że jestem fanem serwera nginx, opis konfiguracji będzie dotyczył właśnie tego serwera www.
Tworząc certyfikat będziemy korzystali z pakietu openssl, choć zawsze można posiłkować się generatorem online.
Drugim warunkiem jest nginx skompilowany z obsługą modułu ssl. W konsoli wywołujemy: nginx -V, jeśli dostaniemy: --with-http_ssl_module to "jesteśmy w domu", w innym przypadku musimy przekompilować nginx-a. Proces kompilacji można znaleźć w artykule o konfiguracji rtorrent + rutorrent = GUI/WebUI.
Tworzenie certyfikatu:
- wszystkie czynności wykonujemy z konta root
- Stwórzmy katalog na certyfikat, np. mkdir -p /etc/nginx/ssl/nazwa_naszej_domeny
- Generujemy klucz RSA bez hasła (umożliwia restart serwera www bez podawania hasła):
openssl genrsa -out mojadomena.key 2048
openssl genrsa -des3 -out mojadomena.key 2048
openssl req -new -key mojadomena.key -out mojadomena.csr
Country Name - podajemy dwuliterowy symbol kraju
State or Province Name - pełna nazwa województwa, np. Małopolskie
Locality Name - pełna nazwa miasta
Organization Name - pełna nazwa naszej firmy / organizacji, np. Nazwa Firmy SA
Organizational Unit Name - dział firmy / organizacji
Common Name - pełna nazwa domenowa (FQDN) szyfrowanej strony, np. poczta.nasza_domena.pl
Email - do kontaktu w sprawie certyfikatu (pole niewymagane)
A challenge password []: - nie uzupełniamy
An optional company name []: - nie wymagane
- Po utworzeniu pliku csr logujemy się do serwisu StartSSL a następnie klikamy w Certificates Wizard wybierając Web Server SSL/TLS Certificate
- Następnie wybieramy Skip, dochodzimy do Submit Certificate Request. Wklejamy zawartość naszego pliku csr
- Jeśli wszystko poszło po naszej myśli zobaczmy komunikat: Certificate Request Received
- Wybieramy z listy naszą domenę
- Następnie zostaniemy poproszeni o podanie subdomeny, którą chcemy zabezpieczyć (np. www.nasza_domena.pl)
- Zapisujemy wygenerowany certyfikat pod nazwą mojadomena.crt
- Ściągamy na serwer plik: wget https://www.startssl.com/certs/class1/sha2/pem/sub.class1.server.sha2.ca.pem
- Dołączamy zawartość pliku do naszego certyfikatu: cat mojadomena.crt sub.class1.server.sha2.ca.pem >> mojadomena.pem
- Dobrze nadać prawidłowe prawa naszym plikom:
chmod 600 /etc/nginx/ssl/nazwa_naszej_domeny/mojadomena.key
chmod 600 /etc/nginx/ssl/nazwa_naszej_domeny/mojadomena.pem
Konfiguracja: nginx + SSL
W tym momencie pozostaje uruchomienie SSL na serwerze nginx. Jako, że wygenerowaliśmy certyfikat SSL dla subdomeny, skonfigurujemy v-hosta. Dla uproszczenia przyjmuję, że naszą domeną jest: poczta.domena.pl . Sama konfiguracja jest identyczna dla wszystkich dystrybucji niemniej jednak może różnić się np. ścieżkami. Poniższa konfiguracja została przeprowadzona na Debianie.
Konfiguracja będzie tak skonstruowana, żeby użytkownik nie musiał specjalnie wpisywać w przeglądarkę: https://poczta.domena.pl wystarczy: poczta.domena.pl .
- Tworzymy plik konfiguracyjny naszego wirtualnego hosta: touch /etc/nginx/sites-available/poczta
server {
listen 80;
server_name poczta.domena.pl;
## stare mało optymalne rozwiązanie: wiki.nginx.org/IfIsEvil
# if ($host = 'poczta.domena.pl' ) {
# rewrite ^/(.*)$ https://poczta.domena.pl/$1 permanent;
# }
# aktualne rozwiązanie
return 301 https://poczta.domena.pl$request_uri;
access_log /var/log/nginx/poczta.domena.pl.access.log;
error_log /var/log/nginx/poczta.domena.pl.error.log;
}
server {
listen 443;
ssl on;
server_name poczta.domena.pl;
ssl_certificate /etc/nginx/ssl/poczta.domena.pl/mojadomena.pem;
ssl_certificate_key /etc/nginx/ssl/poczta.domena.pl/mojadomena.key;
access_log /var/log/nginx/poczta.domena.pl.access_log;
error_log /var/log/nginx/poczta.domena.pl.error_log;
.
. # dalsza część pliku konfiguracyjnego
}