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.

Jedna odpowiedź do “Ubuntu i Apache – Certyfikat SSL w 5 min!”

  1. NoName pisze:

    Super! Wszystko śmiga. Dzięki za artykuł 🙂

Skomentuj NoName Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *