Wyłącz awarię protokołu SSL w Apache2 lub przekieruj bez dopasowania certyfikatu

1

Mam na swoim serwerze wiele wirtualnych hostów, powiedzmy, że obsługuję

www.example.com
sub.example.com
www.example.nl

W mojej konfiguracji DNS wszystkie wskazują na ten sam serwer.

W konfiguracji apache2 znajduje się domyślny plik konfiguracyjny dla http i jeden dla https oraz dodatkowe vhosty dla dodatkowych stron. Chcę przekierować wszystkie bliskie mecze www.example.com. Wszystkie określone witryny mają certyfikat.

Moje pliki wyglądają tak

000-default.conf (redirects to https://www.example.com)
default-ssl.conf (serves https://www.example.com)
sub.example.com.conf (redirects to https://sub.example.com)
sub.example.com-ssl.conf (serves https://sub.example.com)
www.example.nl.conf (redirects to https://www.example.nl)
www.example.nl-ssl.conf (serves https://www.example.nl)

Problem polega na tym, że każde inne żądanie (powiedzmy „for” be-creative.example.nl) domyślnie przyjmuje pierwszą załadowaną konfigurację. Działa to dla http ( 000-defaultbędzie pasować i przekierowywać), ale nie działa dla https, ponieważ nie załadowałem żadnego ważnego certyfikatu be-creative.example.nl. Dlatego nie mogę przekierowywać ani wyświetlać prawidłowej strony.

Jeśli wyłączę default-ssl.conf, żądanie zostanie dopasowane, sub.example.com-ssl.confa niewłaściwy certyfikat będzie nadal obsługiwany.

Pytanie : Jak elegancko obsłużyć te żądania, dla których nie mam certyfikatu? Jak mogę przekierować na http bez uprzedniego posiadania ważnego pasującego certyfikatu?

TacoV
źródło

Odpowiedzi:

0

Jak rozwiązać ten problem na własnym serwerze (CentOS, Apache 2.4) jest strona ogólna (invalidssl.example.com) z ważnym certyfikatem SSL (otrzymałem darmowy od Let's Encrypt) i ustawiam ją w domyślnej konfiguracji. W ten sposób wszelkie żądania https do domeny innej niż ssl zamiast tego pokażą tę ogólną stronę, która zawiera ładny komunikat o błędzie.

Odpowiedzieć na Twoje pytanie:

Jedynym sposobem na dostarczenie treści odwiedzającemu (bez względu na to, czy jest to strona, czy odpowiedź z wyprzedzeniem) żądającej strony przez https bez wywoływania ostrzeżenia w przeglądarce, jest udzielenie odpowiedzi za pomocą ważnego certyfikatu SSL dla żądanej domeny. Osobiście nie widzę powodu, dla którego miałbyś mieć ten problem, ponieważ darmowe certyfikaty SSL są obecnie łatwo dostępne (zobacz Let's Encrypt !).

cascer1
źródło
Ale jeśli ktoś dotrze do tej strony z innego adresu URL ( blah.example.com ), przeglądarka nadal wyświetli komunikat „strona niebezpieczna!”, Zanim zobaczy ładny komunikat o błędzie, prawda?
TacoV
1
O tak, zgadza się! Jedynym sposobem na dostarczanie treści przez https bez wywoływania ostrzeżenia w przeglądarce jest użycie ważnego certyfikatu SSL dla domeny, o którą poprosił użytkownik. Nie sądzę, aby można było to obejść (co jest
zgodne
1
Mam ten problem głównie dlatego, że moje domeny są ustawione na catch-all (* .example.com idzie na ten serwer), a Let's Encrypt nie obsługuje certyfikatów wieloznacznych. W rzeczywistości istnieje komunikat (przeglądarka?), Gdy wyłączasz wszystkie witryny SSL i wypróbujesz https (ERR_SSL_PROTOCOL_ERROR), który jest IMO lepszy niż podawanie niewłaściwego certyfikatu (ERR_CERT_COMMON_NAME_INVALID).
TacoV,
Jeśli masz błąd protokołu, nie sądzę, aby ludzie mogli w ogóle dostać się na stronę . Jedyny sposób, w jaki wiem, jak to zrobić, to faktyczna zmiana konfiguracji openssl, tak aby nie obsługiwała szyfrów obsługiwanych przez klienta, ale wtedy też nie działałaby z ważnym certyfikatem. Jeśli twoi goście nie wiedzą zbyt wiele o apache i konfiguracjach openssl, nie sądzę, aby jakikolwiek błąd był preferowany, ponieważ po prostu odejdą, ponieważ i tak go nie rozumieją. >>
cascer1
>> Jedną rzeczą, którą możesz zrobić, to napisać program, który skanuje dzienniki Apache w poszukiwaniu żądań niepoprawnych poddomen i okresowo żąda certyfikatów Let's Encrypt dla tych poddomen. To nie jest idealne, ale niestety nie mogę wymyślić lepszego rozwiązania.
cascer1