Tworzenie certyfikatu z podpisem własnym dla domeny i subdomen - NET :: ERR_CERT_COMMON_NAME_INVALID

82

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 Commonpolu, 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_INVALIDpojawia się błąd w przeglądarce Chrome dla domeny głównej i wszystkich jej domen podrzędnych, na przykład: https://sub1.myserver.neti 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?

Zed
źródło
Spędziłem dużo czasu, próbując to naprawić. Zobacz moją odpowiedź tutaj stackoverflow.com/questions/42816218/ ...
Alex Vasilev

Odpowiedzi:

20

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:

  1. Utwórz certyfikat z podpisem własnym
  2. Importuj certyfikat do Menedżera certyfikatów systemu Windows
  3. Importuj certyfikat w Menedżerze certyfikatów Chrome
    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 :)
Thomas.Donnelly
źródło
Błąd, do którego utworzyłeś łącze, to A) ważny tylko dla OS X i B) dotyczy domen z końcowym „.”, Z których żadna nie jest ważna dla @Zed.
Philip
Hmm, który to link?
Thomas.Donnelly
Link do błędu chromu (98627)
Philip
Niezależnie od zaproponowanej przeze mnie poprawki działa również w systemie Windows, ponieważ wielokrotnie z niej korzystałem.
Thomas.Donnelly
„Chociaż wolę używać przeglądarki Chrome do programowania, ostatnio znalazłem się w Firefoksie Developer Edition, który nie ma tego problemu”. nie mogę się tutaj bardziej zgodzić ..
Ash
26

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.cnfw systemie Linux) i modyfikując v3_reqsekcję, aby wyglądała następująco:

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.net
DNS.2 = sub1.myserver.net

Mając to na miejscu, nie zapomnij użyć -extensions v3_reqprzełącznika podczas generowania nowego certyfikatu. (zobacz także Jak mogę wygenerować certyfikat z podpisem własnym za pomocą SubjectAltName przy użyciu OpenSSL? )

Fabian S
źródło
1
Użycie subjectAltName = @alt_namescał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. Ustawienie DNS.1 = example.comi DNS.2 = *.example.comzał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 .
bossi
@bossi: Niestety mam ten problem na Chrome / Ubuntu. A cert to nic nadzwyczajnego, jeden host, jedna nazwa DN (wewnętrzne repozytorium GitLab).
Paweł Kraszewski
Działało mniej więcej tydzień temu, nic się nie zmieniło na serwerze. 2 inne serwery zaczęły tyranizować z powodu niedopasowania wielkich i małych liter (cert jest wielkimi literami, Chrome opuszcza adres na małe)
Paweł Kraszewski
2
@bossi Założę się, że twoja wersja systemu Windows jest na ścieżce beta, prawda? Chrome wycofał certyfikaty bez wersji 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.
Tobias J
2
@TobyJ 58.0.3029.19 beta (64-bit)to jest. Odnowiłem drzewo certyfikatów z poprawnymi- subjectAltNamei wszystko działa teraz. I zgadzam się, komunikat o błędzie jest bardzo mylący, ponieważ nie jest CommonNameto nieważne. Gdyby komunikat brzmiał „Brakuje certyfikatu właściwego subjectAltName , wszyscy byliby znacznie bardziej szczęśliwi.
Paweł Kraszewski
18

Utwórz openssl.confplik:

[req]
default_bits = 2048
default_keyfile = oats.key
encrypt_key = no
utf8 = yes
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = US
ST = Cary
L = Cary
O  = BigCompany
CN = *.myserver.net

[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.net
DNS.2 = *.myserver.net

Uruchom to polecenie:

openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout app.key -out app.crt  -config openssl.conf

Pliki wyjściowe app.crti app.keypracuj dla mnie.

Alykoff Gali
źródło
2
W środku jest literówka DNS.1 = *.myserver.net. Powinien być DNS.2 = *.myserver.net. U mnie działa dobrze.
Artem Stepin
2
jeśli korzystasz z systemu Windows, możesz to zrobić za pomocą openssl zainstalowanego z gitem, używając polecenia cmd działającego jako administrator i następującej lokalizacji: „C: \ Program Files \ Git \ usr \ bin \ openssl.exe” req -x509 -sha256 -nodes -days 3650 -newkey rsa: 2048 -keyout app.key -out app.crt -config openssl.conf
George
Napisałem CN = localhost, DNS.1 = localhost, DNS.2 = * .localhost: 8080 i nie działa dla mnie. Co jeszcze powinienem zmienić?
Esqarrouth
14

Twój wieloznaczny *.example.comma nie obejmować domenę główną, example.comale obejmie żadnego wariantu na sub -domain takich jak www.example.comlubtest.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.comz sieciami SAN www.example.comi test.example.comale otrzymałem NET::ERR_CERT_COMMON_NAME_INVALIDostrzeżenie od Chrome. Musiałem wygenerować nowe żądanie podpisania certyfikatu z example.comnazwą 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.

Jeff Puckett
źródło
Jeśli ktoś, kto to czyta, używa Pantheona do hostingu, wydaje się, że rekonstytuuje nazwę zwyczajową skojarzoną z Twoim certyfikatem, kiedy przesyłasz go na swoją platformę, tworząc ten problem. Musisz przetestować pod kątem niestandardowego statycznego adresu IP, który Ci podają, aby sprawdzić, czy nazwa zwyczajowa certyfikatu pozostała nienaruszona podczas konfiguracji.
serraosays
1
Znakomity! „Twój symbol wieloznaczny * .example.com nie obejmuje domeny głównej example.com, ale obejmuje wszystkie warianty w subdomenie, takie jak www.example.com lub test.example.com”. To był właśnie problem w moim przypadku. Rozwiązaniem było po prostu zawierać zarówno DNS.1 = example.comi DNS.2 = *.example.compod [alt_names]w openssl.cnf.
Ben Johnson,
5

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.

Rahul Sreeram
źródło
1

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.

bashmish
źródło
0

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.

Aby obejść ten problem, można utworzyć klucz rejestru systemu Windows, aby umożliwić przeglądarce Google Chrome używanie wspólnej nazwy certyfikatu serwera w celu dopasowania nazwy hosta, jeśli w certyfikacie brakuje rozszerzenia subjectAlternativeName, o ile pomyślnie zweryfikuje on i połączy się z lokalnie zainstalowanym urzędem certyfikacji certyfikaty.

Typ danych: Boolean [Windows: REG_DWORD] Lokalizacja rejestru systemu Windows: HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome Windows / Mac / Linux / Android nazwa preferencji: EnableCommonNameFallbackForLocalAnchors Wartość: 0x00000001 (Windows), true (Linux), true (Android), (Mac) Aby utworzyć klucz rejestru systemu Windows, wykonaj następujące czynności:

Otwórz Notatnik Skopiuj i wklej następującą zawartość do notatnika Edytor rejestru systemu Windows w wersji 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome] "EnableCommonNameFallbackForLocalAnchors" = dword: 00000001 Idź do Plik> Zapisz jako nazwę pliku: any_filename.reg Zapisz jako typ: Wszystkie pliki

Wybierz preferowaną lokalizację pliku

Kliknij Zapisz

Kliknij dwukrotnie zapisany plik, aby go uruchomić

Kliknij Tak w ostrzeżeniu Edytora rejestru

Te informacje znalazłem na stronie pomocy technicznej firmy Symantec: https://support.symantec.com/en_US/article.TECH240507.html

oburęczny
źródło
0

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:

  1. Witryna narzędzi do certyfikatów online z następującymi opcjami:
    • Nazwy wspólne: Dodaj zarówno „localhost”, jak i adres IP swojego systemu, np. 192.168.1.12
    • Alternatywne nazwy podmiotów: Dodaj „DNS” = „localhost” i „IP” = <your ip here, e.g. 192.168.1.12>
    • Opcje menu „CRS” ustawione na „Podpis własny”
    • wszystkie inne opcje były domyślne
  2. Pobierz wszystkie linki
  3. Zaimportuj certyfikat .p7b do systemu Windows, klikając dwukrotnie i wybierając opcję „zainstaluj” / OSX? / Linux?
  4. Dodano certyfikaty do aplikacji węzła ... na przykładzie Google PWA
    • dodaj const https = require('https'); const fs = require('fs');na początku pliku server.js
    • skomentuj return app.listen(PORT, () => { ... });na dole pliku server.js.
    • dodaj poniżej 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

James Nelson
źródło