Powinienem to zrobić dawno temu, ale dopiero teraz zabrałem się za zabezpieczenie SSL-em mojego webmaila opartego na Roundcube. Ponieważ poza mną nikt z niego nie korzysta, a sam sobie zazwyczaj ufam, to zdecydowałem się nie korzystać z żadnego centrum certyfikacji i wygenerować certyfikat własnoręcznie.
W sieci nie brakuje instrukcji generowania certyfikatów, ja staram się robić wszystko po debianowemu, więc kierowałem się opisem z debianowej wiki. Dlatego certyfikat wylądował w katalogu /etc/ssl/localcerts
, który musiałem stworzyć:
mkdir -p /etc/ssl/localcerts
Polecenie generowania klucza i certyfikatu:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/localcerts/mail.komitywa.net.key -out /etc/ssl/localcerts/mail.komitywa.net.crt
Przed wygenerowaniem certyfikatu zostaniemy zapytani o dane certyfikowanego podmiotu:
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) []:Warsaw Organization Name (eg, company) [Internet Widgits Pty Ltd]:komitywa.net Organizational Unit Name (eg, section) []:. Common Name (eg, YOUR name) []:mail.komitywa.net Email Address []:moj-adres-email@komitywa.net
Na koniec warto ograniczyć dostęp do wygenerowanych plików:
chmod 600 /etc/ssl/localcerts/mail.komitywa.net.*
Teraz można już SSL do konfiguracji nginx’a. Do działającego wirtualnego hosta dodałem:
listen 443 ssl; ssl_certificate /etc/ssl/localcerts/mail.komitywa.net.crt; ssl_certificate_key /etc/ssl/localcerts/mail.komitywa.net.key;
Po przeładowaniu nginx’a i przetestowaniu, że połaczenie po HTTPS działa postanowiłem jeszcze dodać przekierowanie z HTTP na HTTPS:
server { listen 80; server_name mail.komitywa.net; return 301 https://mail.komitywa.net$request_uri; }
Wygenerowany certyfikat jest ważny przez rok, więc w kwietniu 2016 będę musiał wygenerować nowy certyfikat.