- Audio (2)
- Codes Scratches (4)
- Elektronika (23)
- Inteligentny dom (1)
- IT (9)
- Mikrokontrolery / Arduino (6)
Ubuntu i Apache – Certyfikat SSL w 5 min!
Tym razem bardzo krótko i na temat – moja metoda (ściągawka) do instalacji certyfikatów ssl na apache’u.
Generujemy żądanie certyfikatu dla organu wydającego
Pierwszym krokiem, który musimy zrobić, aby uzyskać (a później też zainstalować) certyfikat, to wygenerowanie klucza prywatnego, a następnie przy jego pomocy stworzyć plik żądania (CSR), który wyślemy do organu wydającego certyfikaty. Następnie parę w postaci naszego klucza prywatnego + otrzymany certyfikat zainstalujemy na serwerze www.
Najpierw generujemy klucz. Najlepiej robić to wszystko w katalogu /etc/apache2/ssl:
Wersja z hasłem (hasło będzie konieczne podczas startu/restartu apache’a)
openssl genrsa -des3 -out PVK.pem 2048
lub bez hasła:
openssl genrsa -out PVK.pem 2048
Następny krok to stworzenie pliku żądania CSR:
openssl req -new -key PVK.pem -out CSR.pem
Po tym poleceniu program zapyta nas o kilka informacji, które należy podać w celu dostarczenia niezbędnych informacji organowi wydającemu certyfikaty.
Ok, mamy teraz dwa pliki: PVK.pem – klucz prywatny oraz CSR.pem – plik żądania, który zaraz wyślemy do organu wydającego certyfikaty (CA).
Zanim wyślemy pliki, możemy sobie jeszcze je zweryfikować przy pomocy następujących poleceń:
Weryfikacja klucza prywatnego:
openssl rsa -noout -text -in PVK.pem
Weryfikacja pliku csr:
openssl req -noout -text -in CSR.pem
Wysyłamy pliki
Teraz należy wysłać do wybranego przez siebie CA (certificate Authority) – instytucji/firmy wydającej certyfikaty plik CSR.pem, w odpowiedzi powinniśmy dostać plik certyfikatu *.crt.
Instalujemy certyfikat w apache’u
W pierwszej kolejności musimy uruchomić ssl na serwerze…
a2enmod ssl
Jeśli nie mamy zainstalowanego open-ssl, należy to uczynić, korzystając np. z tej komendy:
sudo apt-get install apache2 libapache-mod-ssl
Dalej powiedzmy, że mamy już skonfigurowaną jakąś wirtualkę, np. example.com, zatem przechodzimy do katalogu /etc/apache2/sites-available
cd /etc/apache2/sites-available
I kopiujemy ją jako example.com-ssl
cp example.com example.com-ssl
Otwieramy plik example.com-ssl w swoim ulubionym edytorze tekstu i modyfikujemy port, na którym nasłuchuje server na 443 oraz dodajemy 4 linijki aktywujące ssl na tej wirtualce.
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/example_com.crt #certyfikat, który dostaliśmy od CA
SSLCertificateKeyFile /etc/ssl/certs/PVK.pem #klucz prywatny
SSLCertificateChainFile /etc/apache2/ssl/AddTrustExternalCARoot.crt #chain autoryzacyjny 2 pozycje, tutaj zależy co dostaniemy w odpowiedzi od CA
SSLCertificateChainFile /etc/apache2/ssl/COMODOHigh-AssuranceSecureServerCA.crt
Cały wpis virtual hosta może wyglądać m/w tak:
<VirtualHost *:443>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/www/example.com/public_html
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/example_com.crt #certyfikat, który dostaliśmy od CA
SSLCertificateKeyFile /etc/ssl/certs/PVK.pem #klucz prywatny
SSLCertificateChainFile /etc/apache2/ssl/AddTrustExternalCARoot.crt #chain autoryzacyjny 2 pozycje, tutaj zależy co dostaniemy w odpowiedzi od CA
SSLCertificateChainFile /etc/apache2/ssl/COMODOHigh-AssuranceSecureServerCA.crt
<Directory /home/www/example.com/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
CustomLog /home/www/example.com/log/access-ssl.log combined
ErrorLog /home/www/example.com/log/error-ssl.log
</VirtualHost>
I to właściwie tyle. Jeśli chcemy, możemy jeszcze ustawić przekierowania tak, aby wymusić zawsze oglądanie strony poprzez https. W tym celu w virtualce (tym razem tej „normalnej” na porcie 80), dodajemy krótką regułką mod_rewrite:
RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
Cały VirtualHost może wyglądać m/w tak:
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/www/example.com/public_html
RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>
Teraz pozostaje nam tylko włączyć virtualkę…
a2ensite example.com-ssl
Oraz zrestartować apache’a:
/etc/init.d/apache2 restart
Jeśli w pierwszym punkcie wybraliśmy klucz prywatny chroniony hasłem, wówczas zostaniemy o to hasło poproszeni, a jeśli nie, apache powinien uruchomić się od razu.
No i mamy działający ssl 😉 Teraz po wpisaniu w przeglądarkę adresu http://example.com zostaniemy automatycznie przeniesieni na https://example.com, która będzie zabezpieczona nowo zainstalowanym certyfikatem.
Super! Wszystko śmiga. Dzięki za artykuł 🙂