[google-chrome] 자체 서명 된 SSL 인증서가 잘못되었습니다. “주체 대체 이름 누락”

최근에 Chrome이 자체 서명 된 SSL 인증서 작업을 중단하고 안전하지 않다고 생각합니다. DevTools | Security탭 에서 인증서를 보면

주체 대체 이름 없음이 사이트의 인증서에 도메인 이름 또는 IP 주소가 포함 된 주체 대체 이름 확장이 없습니다.

인증서 오류 사이트의 인증서 체인 (net :: ERR_CERT_COMMON_NAME_INVALID)에 문제가 있습니다.

이 문제를 어떻게 해결할 수 있습니까?



답변

이 문제를 해결하려면 openssl기본적으로 인증서를 생성 할 때 추가 매개 변수를 제공해야합니다.

-sha256 -extfile v3.ext

경우 v3.ext에 그렇게 같은 파일이며, %%DOMAIN%%당신이 당신으로 사용하는 것과 동일한 이름으로 대체 Common Name. 여기여기에 더 많은 정보 가 있습니다 . 일반적으로 인증서를 생성하려는 도메인에 Common Name%%DOMAIN%%을 설정합니다 . 따라서이면 www.mysupersite.com둘 다에 사용할 것입니다.

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

참고 :이 문제를 해결 하고 Chrome, Safari 및 Java 클라이언트에서 사용할 완전히 신뢰할 수있는 SSL 인증서를 생성 하는 스크립트는 여기에서 찾을 수 있습니다.

또 다른 참고 사항 : 자체 서명 된 인증서를 볼 때 Chrome에서 오류가 발생하지 않도록하는 것 이라면 여기에 설명 된대로 특수한 명령 줄 옵션으로 시작하여 Chrome이 모든 사이트에 대한 모든 SSL 오류를 무시하도록 지시 할 수 있습니다. 수퍼 유저


답변

다음 솔루션은 크롬 65 ( ref ) 에서 나를 위해 일했습니다.

OpenSSL 구성 파일 생성 (예 : req.cnf)

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = company.net

이 구성 파일을 참조하는 인증서 만들기

openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
 -keyout cert.key -out cert.pem -config req.cnf -sha256


답변

Bash 스크립트

내가 만든 bash는 스크립트를 쉽게 크롬에서 유효 자체 서명 된 TLS 인증서를 생성 할 수 있도록.

테스트되었으며 Chrome 65.x여전히 작동 중입니다. 새 인증서를 설치 한 후에는 Chrome을 다시 시작해야합니다.

chrome://restart


기타 리소스

확인해야 할 또 다른 (훨씬 더 강력한) 도구는 CloudFlare의 cfssl도구 키트입니다.


답변

나는 단순히 -subj기계 IP 주소를 추가 하는 매개 변수 를 사용한다 . 따라서 하나의 명령으로 만 해결되었습니다.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -subj '/CN=my-domain.com/subjectAltName=DNS.1=192.168.0.222/' -keyout my-domain.key -out my-domain.crt

C, ST, L, O, OU, emailAddress와 같은 다른 속성을 추가하여 프롬프트없이 인증서를 생성 할 수 있습니다.


답변

macOS / Chrome에서 작동하는 자체 서명 인증서를 얻는 데 너무 많은 문제가있었습니다. 마지막으로 Mkcert, “원하는 이름으로 로컬에서 신뢰할 수있는 개발 인증서를 만드는 간단한 제로 구성 도구”를 발견했습니다. https://github.com/FiloSottile/mkcert


답변

  • 홈 디렉토리에 OpenSSL 구성 사본을 만듭니다.

    cp /System/Library/OpenSSL/openssl.cnf ~/openssl-temp.cnf
    

    또는 Linux :

    cp /etc/ssl/openssl.cnf ~/openssl-temp.cnf
    
  • 에 주체 대체 이름을 추가 openssl-temp.cnf아래 [v3_ca]:

    [ v3_ca ]
    subjectAltName = DNS:localhost
    

    대체 localhost당신이 그 인증서를 생성하려는 도메인.

  • 인증서 생성 :

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
        -config ~/openssl-temp.cnf
        -keyout /path/to/your.key -out /path/to/your.crt
    

그런 다음 삭제할 수 있습니다. openssl-temp.cnf


답변

v3.ext 파일의 DNS.1 값을 변경하여 (net :: ERR_CERT_AUTHORITY_INVALID)를 제거 할 수있었습니다.

[alt_names] DNS.1 = domainname.com

자신의 도메인으로 domainname.com을 변경하십시오.