Jak skonfigurować SSL w Apache?

10

Zainstalowałem apache w RHEL 6. Wszystko działa dobrze. Jakie zmiany i konfiguracje należy wykonać, aby korzystać z https: // localhost: 443 / .

Jeśli zmienię „Listen 80” na 443, zgłasza błąd połączenia SSL

„Błąd 107 (net :: ERR_SSL_PROTOCOL_ERROR): Błąd protokołu SSL.”

monu
źródło

Odpowiedzi:

13

Jeśli używasz apache2, musisz wykonać następujące czynności:

Krok 1: Użyj OpenSSL do wyprodukowania kluczy, które służą do zabezpieczenia Twojej witryny. Klucze te są używane podczas szyfrowania i odszyfrowywania ruchu do bezpiecznej witryny.

$ openssl genrsa -out mydomain.key 1024

To polecenie utworzy 1024-bitowy klucz prywatny i umieści go w pliku mydomain.key.

Krok 2: Wygeneruj własny certyfikat.

$ openssl req -new -key mydomain.key -x509 -out mydomain.crt

Krok 3: Trzymaj klucz prywatny w katalogu /etc/apache2/ssl.key/i certyfikat w katalogu /etc/apache2/ssl.crt/.

Uwaga:ssl.key katalog musi być czytelny tylko root.

Krok 4: Teraz musisz edytować httpd.confplik /etc/apache2.

Teraz ten plik powinien zawierać takie treści:

NameVirtualHost *:80
NameVirtualHost *:443
Listen 443

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /srv/www/htdocs/mydomain
ServerName www.mydomain.com
ServerAlias mydomain.com
</VirtualHost>


<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /srv/www/htdocs/mydomain-secure
ServerName mail.mydomain.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/mydomain.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/mydomain.key
</VirtualHost>


<Directory /srv/www/htdocs/mydomain-secure>
SSLRequireSSL
</Directory>


<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /srv/www/htdocs/mydomain
ServerName mail.mydomain.com
RedirectMatch permanent (/.*) https://mail.mydomain.com$1
</VirtualHost>
pradeepchhetri
źródło
Pierwsze trzy wiersze nie są konieczne. 1. NameVirtualHostjest przestarzały i zostanie usunięty w przyszłych wersjach Apache. Obecnie jest to już brak operacji. 2. Listen 443może powodować problemy, jeśli apache jest już skonfigurowany do nasłuchiwania na porcie 443, co ma już miejsce w wielu dystrybucjach systemu Linux. Dodaj tylko, jeśli masz pewność, że ta linia nie jest skonfigurowana gdzie indziej.
lanoxx
3

Nie zmieni Listen 80się 443na /etc/httpd/conf/httpd.conf. SSL jest skonfigurowany w /etc/httpd/conf.d/ssl.conf. W przypadku RHEL 6 protokół SSL jest włączony i domyślnie nasłuchuje na certyfikacie z podpisem własnym.

Możesz przejść do domyślnej witryny za pomocą protokołu SSL, przeglądając stronę https://localhost(nie musisz dodawać portu na końcu adresu URL).

Jeśli chcesz przekazać wszystkie żądania HTTP do HTTPS (co, jak sądzę, próbujesz osiągnąć), możesz dodać stałe przekierowanie lub użyć modułu Apache mod_rewrite.

Najłatwiejszym i najbezpieczniejszym sposobem jest skonfigurowanie stałego przekierowania. Włącz nazwanych wirtualnych hostów i dodaj Redirectdyrektywę do VirtualHost w /etc/httpd/conf/httpd.conf.

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName localhost
   Redirect permanent / https://localhost
</VirtualHost>

Za pomocą mod_rewritemożesz także utworzyć nazwanego wirtualnego hosta. To nie jest zalecana metoda, ale zadziała.

NameVirtualHost *:80
<VirtualHost *:80>
   # Enable the Rewrite engine
   RewriteEngine On
   # Make sure the connection is not already HTTPS
   RewriteCond %{HTTPS} !=on
   # This rewrites the URL and forwards to https
   RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

Jeśli chcesz wyłączyć SSL, skomentuj te linie /etc/httpd/conf.d/ssl.confi uruchom ponownie Apache.

LoadModule ssl_module modules/mod_ssl.so
Listen 443
George M.
źródło
W rzeczywistości, jeśli dodasz pakiet mod_ssl dla RHEL6, tworzy on /etc/httpd/conf.d/ssl.conf, który ładuje moduł i konfiguruje <VirtualHost _default_:443>ze wszystkimi niezbędnymi parametrami, każdy z komentarzami. mod_sslPakiet nie jest instalowany automatycznie, jeśli zainstalowano httpdpakiet.
jsbillings
1
Chciałbym dodać tylko jedną rzecz do twojego przepisywania: użyj [R=301,L]zamiast po prostu [R,L], w ten sposób przepisanie wykorzystuje stałą opcję kodów stanu HTTP 3xx .
dcestari