Mam konfigurację pihole w domu, więc chcę móc obsługiwać żądania dotyczące dowolnej witryny z własnym serwerem, aby wyświetlić stronę „ta strona została zablokowana”.
Próbuję to zrobić, tworząc samopodpisany certyfikat dla dowolnego adresu URL i instalując go na moim urządzeniu. Polecenia, których użyłem do wygenerowania certyfikatu:
openssl genrsa 2048 > pihole.key
openssl req -new -x509 -nodes -days 36500\
-key pihole.key \
-subj "/C=NL/ST=Utrecht, Inc./CN=*" \
-reqexts SAN \
-config <(cat /etc/ssl/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:*,DNS:*")) \
-out pihole.cert
openssl x509 -noout -fingerprint -text < pihole.cert > pihole.info
cat pihole.cert pihole.info > pihole.pem
service apache2 reload
Zainstalowałem ten certyfikat na moim urządzeniu z systemem Windows, a system Windows pokazuje, że jest to ważny certyfikat.
Jednak chrome daje mi NET::ERR_CERT_COMMON_NAME_INVALID
, a edge daje podobny błąd ( DLG_FLAGS_SEC_CERT_CN_INVALID
)
Dlaczego to? Jest CN = *
po prostu niedozwolone? Jak mogę osiągnąć to, czego chcę?
ssl
certificate
Daniël van den Berg
źródło
źródło
Odpowiedzi:
To jest niedozwolone. Jako dodatek do standardowego sprawdzania poprawności nazwy hosta TLS, wszystkie główne przeglądarki internetowe (klienci HTTPS) zasadniczo zgodziły się na ograniczenie certyfikatów wieloznacznych do „eTLD + 1” - to znaczy, że musi istnieć „skuteczna TLD” plus jeszcze jedna nie -wildcard komponent.
Ogólnie przekłada się to na wymaganie co najmniej dwóch składników (
*.example.net
jest w porządku, ale*.net
nie jest, ani nie jest nagi*
). Reguła „skutecznej TLD” rozszerza ją na sufiksy wielopoziomowe, ponieważco.uk
ludzie używają w praktyce niepodzielnych „TLD”. (Więc*.example.ac.uk
jest dozwolone, ale*.ac.uk
nie jest.)Możesz sprawdzić, w jaki sposób publiczna lista sufiksów jest implementowana w Chromium i Mozilli .
Zobacz pokrewną dyskusję w Security.SE, która zawiera cytat z wymagań podstawowych forum CA-Browser Forum (które dotyczą tylko publicznych urzędów certyfikacji WebPKI, ale mimo to odzwierciedlają ogólną implementację):
Aby uniknąć tego ograniczenia, zbuduj urząd certyfikacji, który wydaje certyfikaty „na żądanie” dla dowolnej witryny, którą próbujesz odwiedzić. Nie wiem, jak można by to wdrożyć na jakimkolwiek zwykłym serwerze WWW, ale jest to powszechna metoda stosowana w komercyjnych systemach przechwytywania TLS; programy antywirusowe i inne złośliwe oprogramowanie; oraz narzędzia programistyczne, takie jak pakiet Burp Proxy.
Na przykład serwer WWW OpenResty (w zasadzie Nginx-with-Lua) ma
ssl_certificate_by_lua
opcję implementacji dynamicznego generowania certyfikatów. Serwer proxy Squid obsługuje naśladowanie certyfikatów w funkcji ssl-bump.Należy również zauważyć, że sieci SAN całkowicie zastępują podmiot CN, jeśli oba są obecne. Powoduje to, że dołączanie CN jest w większości zbędne (chyba że oprogramowanie klienckie jest tak stare, że nie obsługuje SAN), a przeglądarki publicznych urzędów certyfikacji nawet go nie akceptują.
źródło
W certyfikacie może znajdować się tylko jeden symbol wieloznaczny (tj. Nie
*.*.example.com
), może pasować tylko do jednej etykiety (tj. Tylkowww
, niewww.example.com
), może znajdować się tylko na lewej pozycji (tj.*.www.example.com
Ale niewww.*.example.com
) i nie może znajdować się w publicznym sufiksie (tj. nie*.com
).źródło