Postępowałem zgodnie z tym samouczkiem do tworzenia podpisanych certyfikatów SSL w systemie Windows do celów programistycznych i działało świetnie dla jednej z moich domen (używam pliku hosts do symulacji DNS). Wtedy doszedłem do wniosku, że mam wiele subdomen, a stworzenie certyfikatu dla każdej z nich byłoby upierdliwe. Próbowałem więc utworzyć certyfikat przy użyciu symbolu wieloznacznego w Common
polu, jak sugerowano w niektórych odpowiedziach przy awarii serwera. Lubię to:
Common Name: *.myserver.net/CN=myserver.net
Jednak po zaimportowaniu tego certyfikatu do Trusted Root Certification Authority NET::ERR_CERT_COMMON_NAME_INVALID
pojawia się błąd w przeglądarce Chrome dla domeny głównej i wszystkich jej domen podrzędnych, na przykład: https://sub1.myserver.net
i https://myserver.net
.
Ten serwer nie mógł udowodnić, że to myserver.net; jego certyfikat bezpieczeństwa pochodzi z * .myserver.net / CN = myserver.net.
Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia przez atakującego.
Czy w polu Common Name jest coś nie tak, co powoduje ten błąd?
źródło
Odpowiedzi:
Jak stwierdził Rahul, jest to powszechny błąd Chrome i OSX. W przeszłości miałem podobne problemy. W rzeczywistości w końcu zmęczyło mnie robienie 2 [tak, wiem, że to niewiele] dodatkowych kliknięć podczas testowania lokalnej witryny pod kątem pracy.
Jeśli chodzi o możliwe obejście tego problemu [w systemie Windows], użyłbym jednego z wielu dostępnych narzędzi do samopodpisywania certyfikatów .
Zalecane kroki:
UWAGA: Krok 3 rozwiąże problem, który wystąpił, gdy Google naprawi błąd ... biorąc pod uwagę, że minął czas, w przewidywalnej przyszłości nie ma ETA. **
Chociaż wolę używać Chrome do rozwoju, ostatnio znalazłem się w Firefox Developer Edition . który nie ma tego problemu.
Mam nadzieję że to pomoże :)
źródło
Chrome 58 zrezygnował z obsługi certyfikatów bez alternatywnych nazw podmiotów .
Idąc dalej, może to być kolejny powód napotkania tego błędu.
źródło
Aby obejść ten problem, należy dodać nazwy domen, których używasz jako „subjectAltName” (alternatywna nazwa podmiotu w wersji X509v3). Można to zrobić, zmieniając konfigurację OpenSSL (
/etc/ssl/openssl.cnf
w systemie Linux) i modyfikującv3_req
sekcję, aby wyglądała następująco:Mając to na miejscu, nie zapomnij użyć
-extensions v3_req
przełącznika podczas generowania nowego certyfikatu. (zobacz także Jak mogę wygenerować certyfikat z podpisem własnym za pomocą SubjectAltName przy użyciu OpenSSL? )źródło
subjectAltName = @alt_names
całkowicie rozwiązało mój problem. Jednak wcześniej powiązałem tożsamość DNS z moją domeną, podając jąCN=*.example.com
. UstawienieDNS.1 = example.com
iDNS.2 = *.example.com
załatwiło sprawę. Dziwne (dla mnie) było to, że wszystko działało do ~ 2017-03-17 i zatrzymało się dzień później (uruchomiłem dużą partię aktualizacji systemu Windows). Jednak nic mi się nie zepsuło na Linuksie, to był tylko Chrome , Firefox na Windowsie .subjectAltName
Chrome 58, która jest obecnie w wersji beta. Ugryzło mnie to mocno, ponieważ nie tylko nic o tym nie widziałem, ale nazwa błędu jest bardzo myląca (nie jest to nazwa zwyczajowa, która jest nieprawidłowa!) Byłem przeciwieństwem ciebie; wydarzyło się to tylko dla mnie na Linuksie, więc spędziłem godziny próbując naprawić tam mój lokalny magazyn certyfikatów.58.0.3029.19 beta (64-bit)
to jest. Odnowiłem drzewo certyfikatów z poprawnymi-subjectAltName
i wszystko działa teraz. I zgadzam się, komunikat o błędzie jest bardzo mylący, ponieważ nie jestCommonName
to nieważne. Gdyby komunikat brzmiał „Brakuje certyfikatu właściwegosubjectAltName
” , wszyscy byliby znacznie bardziej szczęśliwi.Utwórz
openssl.conf
plik:Uruchom to polecenie:
Pliki wyjściowe
app.crt
iapp.key
pracuj dla mnie.źródło
DNS.1 = *.myserver.net
. Powinien byćDNS.2 = *.myserver.net
. U mnie działa dobrze.Twój wieloznaczny
*.example.com
ma nie obejmować domenę główną,example.com
ale obejmie żadnego wariantu na sub -domain takich jakwww.example.com
lubtest.example.com
Preferowaną metodą jest ustalenie alternatywnych nazw podmiotu, takich jak w odpowiedzi Fabiana, ale należy pamiętać, że obecnie Chrome wymaga, aby nazwa pospolita była dodatkowo wymieniona jako jedna z alternatywnych nazw podmiotu (jak to poprawnie wykazał w odpowiedzi). Niedawno odkryłem ten problem, ponieważ miałem nazwę pospolitą
example.com
z sieciami SANwww.example.com
itest.example.com
ale otrzymałemNET::ERR_CERT_COMMON_NAME_INVALID
ostrzeżenie od Chrome. Musiałem wygenerować nowe żądanie podpisania certyfikatu zexample.com
nazwą pospolitą i jedną z sieci SAN. Wtedy Chrome w pełni zaufał certyfikatowi. I nie zapomnij zaimportować certyfikatu głównego do Chrome jako zaufanego organu do identyfikowania witryn internetowych.źródło
DNS.1 = example.com
iDNS.2 = *.example.com
pod[alt_names]
wopenssl.cnf
.Myślę, że to może być błąd w Chrome. Dawno temu był podobny problem: zobacz to.
Spróbuj w innej przeglądarce. Myślę, że powinno działać dobrze.
źródło
Dla każdego, kto to napotka i chce zaakceptować ryzyko, aby to przetestować, istnieje rozwiązanie: przejdź do trybu incognito w przeglądarce Chrome, a będziesz mógł otworzyć „Zaawansowane” i kliknąć „Przejdź do jakiegoś.url”.
Może to być przydatne, jeśli chcesz sprawdzić jakąś witrynę, którą sam utrzymujesz i po prostu testować jako programista (i jeśli nie masz jeszcze skonfigurowanego odpowiedniego certyfikatu deweloperskiego).
Oczywiście NIE JEST TO DLA OSÓB korzystających ze strony w wersji produkcyjnej, gdzie ten błąd wskazuje, że jest problem z bezpieczeństwem strony.
źródło
Jeśli masz dość tego błędu. Możesz sprawić, by Chrome nie zachowywał się w ten sposób. Nie mówię, że to najlepszy sposób, po prostu mówię, że to sposób.
Te informacje znalazłem na stronie pomocy technicznej firmy Symantec: https://support.symantec.com/en_US/article.TECH240507.html
źródło
Podane odpowiedzi nie zadziałały dla mnie (Chrome lub Firefox) podczas tworzenia PWA do lokalnego rozwoju i testowania. NIE UŻYWAĆ DO PRODUKCJI! Udało mi się skorzystać z:
<your ip here, e.g. 192.168.1.12>
const https = require('https'); const fs = require('fs');
na początku pliku server.jsreturn app.listen(PORT, () => { ... });
na dole pliku server.js.https.createServer({ key: fs.readFileSync('./cert.key','utf8'), cert: fs.readFileSync('./cert.crt','utf8'), requestCert: false, rejectUnauthorized: false }, app).listen(PORT)
Nie mam więcej błędów w przeglądarce Chrome ani Firefox
źródło