Ostatnio Chrome przestał działać z moimi samopodpisanymi certyfikatami SSL i uważa, że nie są one bezpieczne. Kiedy patrzę na certyfikat w DevTools | Security
zakładce, widzę, że jest napisany
Brak alternatywnej nazwy podmiotu Certyfikat tej witryny nie zawiera rozszerzenia alternatywnej nazwy podmiotu zawierającego nazwę domeny lub adres IP.
Błąd certyfikatu Wystąpiły problemy z łańcuchem certyfikatów witryny (net :: ERR_CERT_COMMON_NAME_INVALID).
Jak mogę to naprawić?
google-chrome
ssl
https
pkix
Brad Parks
źródło
źródło
CN=www.example.com
jest prawdopodobnie źle. Nazwy hostów zawsze trafiają do sieci SAN . Jeśli jest obecny w CN , to musi być również obecny w SAN (w tym przypadku musisz podać go dwukrotnie). Aby uzyskać więcej zasad i powodów, zobacz Jak podpisujesz żądanie podpisania certyfikatu w urzędzie certyfikacji i Jak utworzyć certyfikat z podpisem własnym za pomocą openssl? Konieczne będzie również umieszczenie certyfikatu z podpisem własnym w odpowiednim magazynie zaufanych certyfikatów.Odpowiedzi:
Aby to naprawić, musisz w zasadzie podać dodatkowy parametr
openssl
podczas tworzenia certyfikatu-sha256 -extfile v3.ext
gdzie
v3.ext
jest taki plik,%%DOMAIN%%
zastępowany tą samą nazwą, której używaszCommon Name
. Więcej informacji tutaj i tutaj . Zwróć uwagę, że zazwyczaj ustawiszCommon Name
i%%DOMAIN%%
na domenę, dla której próbujesz wygenerować certyfikat. Więc gdyby tak byłowww.mysupersite.com
, użyłbyś tego do obu.v3.ext
Uwaga: skrypty, które rozwiązują ten problem i tworzą w pełni zaufane certyfikaty ssl do użytku w przeglądarce Chrome, Safari i od klientów Java, można znaleźć tutaj
Kolejna uwaga : jeśli wszystko, co próbujesz zrobić, to powstrzymać chrome przed wyrzucaniem błędów podczas przeglądania certyfikatu z podpisem własnym, możesz poinstruować Chrome, aby ignorował wszystkie błędy SSL dla WSZYSTKICH witryn, uruchamiając go specjalną opcją wiersza poleceń, jak opisano tutaj na SuperUser
źródło
bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 -sha256 -extfile v3.ext
. Oczywiście nadal musisz zapisaćv3.ext
plik do pliku w tym samym folderze.unknown option -extfile
. Jak to naprawić?extfile
dyrektywy w niewłaściwym poleceniu openssl? Zamiast tego jest używany wopenssl req -new ...
, jest używany wopenssl x509 -req ...
. Przynajmniej tak ktoś tutaj powiedział , co wydaje się prawdą z przykładu, który mam w innej odpowiedzi na podobne pytanie, jak w pełni wygenerować te certyfikatyNastępujące rozwiązanie zadziałało dla mnie na Chrome 65 ( ref ) -
Utwórz plik konfiguracyjny OpenSSL (przykład: req.cnf)
Utwórz certyfikat odwołujący się do tego pliku konfiguracyjnego
źródło
basicConstraints = CA:true
brakuje?Bash Script
Stworzyłem skrypt bash, aby ułatwić generowanie samodzielnie podpisanych certyfikatów TLS, które są ważne w Chrome.
Testowane
Chrome 65.x
i nadal działa. Pamiętaj, aby ponownie uruchomić Chrome po zainstalowaniu nowych certyfikatów.Inne zasoby
Kolejnym (znacznie bardziej niezawodnym) narzędziem, które warto sprawdzić, jest
cfssl
zestaw narzędzi CloudFlare :źródło
Po prostu używam
-subj
parametru dodającego adres IP maszyny. Tak rozwiązany za pomocą tylko jednego polecenia.Możesz dodać inne atrybuty, takie jak C, ST, L, O, OU, emailAddress, aby generować certyfikaty bez pytania.
źródło
openssl.exe req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 365 -nodes -subj "/CN=my.domain.com" -addext "subjectAltName=DNS:my.domain.com"
IIS wymaga*.pfx
formatu:openssl.exe pkcs12 -export -out certificate.pfx -inkey certificate.key -in certificate.crt
Miałem tak wiele problemów z uzyskaniem certyfikatów z podpisem własnym działających na macOS / Chrome. W końcu znalazłem Mkcert: „Proste narzędzie o zerowej konfiguracji do tworzenia lokalnie zaufanych certyfikatów programistycznych o dowolnych nazwach”. https://github.com/FiloSottile/mkcert
źródło
Utwórz kopię swojej konfiguracji OpenSSL w swoim katalogu domowym:
lub w systemie Linux:
Dodaj alternatywną nazwę podmiotu do
openssl-temp.cnf
, poniżej[v3_ca]
:Zastąp
localhost
domeną, dla której chcesz wygenerować ten certyfikat.Wygeneruj certyfikat:
Następnie możesz usunąć
openssl-temp.cnf
źródło
Udało mi się pozbyć (net :: ERR_CERT_AUTHORITY_INVALID) zmieniając wartość DNS.1 pliku v3.ext
[alt_names] DNS.1 = nazwa_domeny.com
Zmień domainname.com na własną domenę.
źródło
Oto bardzo prosty sposób na utworzenie certyfikatu IP, któremu będzie ufał Chrome.
Plik ssl.conf ...
Gdzie oczywiście 192.168.1.10 to adres IP sieci lokalnej, któremu chcemy ufać Chrome.
Utwórz certyfikat:
W systemie Windows zaimportuj certyfikat do zaufanego głównego magazynu certyfikatów na wszystkich komputerach klienckich. Na telefonie lub tablecie z systemem Android pobierz certyfikat, aby go zainstalować. Teraz Chrome będzie ufać certyfikatowi w systemie Windows i Android.
W programie Windows Dev Box najlepszym miejscem do pobrania openssl.exe jest „c: \ Program Files \ Git \ usr \ bin \ openssl.exe”
źródło
na MAC począwszy od wersji chrome 67.0.3396.99 mój certyfikat z podpisem własnym przestał działać.
regeneracja ze wszystkim co tu napisano nie zadziałała.
AKTUALIZACJA
miałam szansę potwierdzić, że moje podejście działa dzisiaj :). Jeśli to nie zadziała, upewnij się, że używasz tego podejścia
skopiowane stąd https://ksearch.wordpress.com/2017/08/22/generate-and-import-a-self-signed-ssl-certificate-on-mac-osx-sierra/
KONIEC AKTUALIZACJI
w końcu był w stanie zobaczyć zielony Secure tylko po usunięciu mojego certyfikatu z systemu i dodaniu go do lokalnego pęku kluczy. (jeśli jest - najpierw go upuść). Nie jestem pewien, czy to ma znaczenie, ale w moim przypadku pobrałem certyfikat przez chrome i zweryfikowałem, że data utworzenia jest dzisiaj - więc to ta, którą właśnie utworzyłem.
mam nadzieję, że będzie to pomocne dla kogoś, kto spędził na nim dzień.
nigdy nie aktualizuj Chrome!
źródło
Jeśli chcesz uruchomić localhost serwera, musisz skonfigurować
CN = localhost
iDNS.1 = localhost
.źródło