Konfigurowanie Apache z SSL
Poniższe instrukcje zakładają, że chcesz uruchomić zarówno bezpieczny serwer (na porcie 443
) i zwykły serwer (na porcie 80
). Najpierw musisz skonfigurować serwer do nasłuchiwania na obu portach. Albo edytuj /etc/apache2/ports.conf
(w Debianie; jest to zawarte w apache2.conf
) lub edytuj /etc/apache2/apache2.conf
bezpośrednio, aby uwzględnić linie:
Wyświetl listę 80 443
Następnie edytuj /etc/apache2/sites-enabled/yoursite
aby użyć ustawień SSL. Rozdzielenie zwykłych i bezpiecznych ustawień serwera za pomocą VirtualHosts jest najłatwiejszą opcją pod względem łatwości konserwacji. Każda konfiguracja poza sekcjami VirtualHosts (np. Ustawienie ServerAdmin) będzie dotyczyła zarówno (jak i innych) VirtualHosts.
Wersje Apache 2.4.8 i nowsze wersje oczekują, że certyfikat serwera będzie łączony z dowolnymi certyfikatami pośrednimi w jednym pliku. Aby pobrać plik z łańcuchem z SSL.com, wybierz Nginx
link do pobrania na koncie portalu:
Alternatywnie możesz połączyć istniejące certyfikaty i pliki pośrednie za pomocą polecenia takiego jak poniżej:
$ cat /etc/ssl/private/ca-bundle-client.crt >> /etc/ssl/private/yourdomain.crt
Dodaj następującą sekcję do pliku konfiguracyjnego:
# =================================================== # SSL /TLS ustawienia # ================================================== = NameVirtualHost *: 443 DocumentRoot "/ var / www / yoursite" SSLEngine on SSLCertificateFile /etc/ssl/private/yourdomain.chained.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key
Kilka uwag na temat tej konfiguracji:
SSLEngine
należy włączyć, aby serwer używał protokołu SSL.DocumentRoot
ustawia katalog główny dla tego wirtualnego hosta. Oznacza to, że możesz całkowicie oddzielić bezpieczne treści od zwykłych treści.SSLCertificateFile
należy ustawić na lokalizację, w której umieścisz plik z certyfikatem serwera i łańcuchem pośrednim.SSLCertificateKeyFile
należy ustawić na lokalizację, w której umieścisz plik klucza prywatnego.
Dodaj następującą sekcję do pliku konfiguracyjnego:
# =================================================== # SSL /TLS ustawienia # ================================================== = NameVirtualHost *: 443 DocumentRoot "/ var / www / yoursite" SSLEngine on SSLCertificateFile /etc/ssl/private/yourdomain.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key SSLCertificateChainFile / etc / ssl- private / ca client.crt
Kilka uwag na temat tej konfiguracji:
SSLEngine
należy włączyć, aby serwer używał protokołu SSL.DocumentRoot
ustawia katalog główny dla tego wirtualnego hosta. Oznacza to, że możesz całkowicie oddzielić bezpieczne treści od zwykłych treści.SSLCertificateFile, SSLCertificateChainFile,
iSSLCertificateKeyFile
należy ustawić odpowiednio w lokalizacjach, w których umieścisz pliki certyfikatu, pośredniego i prywatnego.
Aby uruchomić zwykły serwer na porcie 80, dodaj następującą sekcję do pliku konfiguracyjnego:
NameVirtualHost *: 80 DocumentRoot "/ var / www / yoursite" # Konfiguracja katalogu specyficzna dla hosta, opcje itp. # Większość tych opcji prawdopodobnie zostanie ustawiona poza sekcjami VirtualHosts #.
Po zapisaniu edytowanego pliku konfiguracyjnego zrestartuj serwer WWW. Jeśli użyłeś hasła podczas generowania certyfikatu, musisz je wprowadzić, gdy zostaniesz zakwestionowany.
Testowanie
Utwórz podstawową stronę index.html w dowolnym miejscu katalogu głównego serwera WWW, jeśli nie masz tam jeszcze zawartości.
Następnie skieruj swoją przeglądarkę internetową na https://www.yoursite.com
. Powinieneś zobaczyć otwarte połączenie SSL i dostarczoną stronę. Jeśli używasz certyfikatu z podpisem własnym, przeglądarka wyświetli ostrzeżenie z ostrzeżeniem, że nie można zweryfikować tożsamości serwera. Możesz wyświetlić i zaakceptować certyfikat. W przypadku korzystania z zewnętrznego certyfikatu wszystko powinno odbywać się bez interwencji.
Upewnij się również, że nie możesz uzyskać dostępu do chronionych treści za pomocą http: //. Jeśli spróbujesz, powinieneś otrzymać komunikat o błędzie.
Rozwiązywanie problemów
Jeśli nie działa zgodnie z oczekiwaniami, najpierw sprawdź, czy serwer faktycznie działa, używając ps -a | grep apache
. Jeśli to nic nie zwróci, spróbuj uruchomić go ponownie i sprawdź komunikaty o błędach na terminalu.
Sprawdź także, czy uprawnienia do pliku klucza i certyfikatu są ustawione poprawnie (patrz wyżej), a także uprawnienia do testowego pliku HTML i jego katalogu nadrzędnego.
Następnie sprawdź dzienniki. Powinieneś sprawdzić zarówno dzienniki głównego serwera, jak i dzienniki SSL, które skonfigurowałeś w swoim pliku konfiguracyjnym powyżej. Jeśli nie dostaniesz nic użytecznego, spróbuj zmienić wartość LogLevel w pliku konfiguracyjnym Apache2 na „debug”, zrestartuj Apache2 i przetestuj ponownie. Powinno to dać więcej danych z pliku dziennika.
Jeśli używasz również zwykłego serwera WWW na porcie 80, spróbuj pobrać stronę testową przez http: // zamiast https: //, aby pomóc zidentyfikować, czy problem dotyczy serwera internetowego, czy połączenia SSL. Zauważ, że w powyższej konfiguracji katalog główny serwera WWW jest inny dla http: // i https: //, więc nie będziesz (lub nie powinieneś!) Mieć dostępu do tej samej zawartości. Jeśli jednak strona testowa w katalogu głównym http: // działa dobrze, a strona testowa w katalogu głównym https: // nie, może to pomóc w zlokalizowaniu problemu.
Jeśli problemem jest połączenie SSL, przydatnym narzędziem jest s_client
, które jest narzędziem diagnostycznym do rozwiązywania problemów TLS/ Połączenia SSL. Podstawowe zastosowanie to: /usr/bin/openssl s_client -connect localhost:443
. Istnieje również wiele innych opcji, dla których możesz sprawdzić dokumentację. Jeśli pojawią się komunikaty o błędach, powinno to pomóc w zlokalizowaniu problemu.