자체 서명 된 SSL 인증서가 잘못되었습니다. "주체 대체 이름 누락"


98

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

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

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

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


33
. ..... 그 당신의 스택을 생성하는 부분 자체 서명 인증서에 대해 ,,, 당신에게 브래드이 아닌 프로그래밍 질문 감사되는 방법
달콤한 칠리 필라델피아

1
CN=www.example.com아마 틀렸을 것입니다. 호스트 이름은 항상 SAN에 있습니다. 에서 현재의 경우 CN은 , 다음이에서 있어야 SAN 도 (이 경우에 두 번 나열 할 수 있습니다). 더 많은 규칙과 이유는 인증 기관을 사용하여 인증서 서명 요청에 서명 하는 방법openssl을 사용하여 자체 서명 된 인증서를 만드는 방법을 참조하십시오 . 또한 자체 서명 된 인증서를 적절한 신뢰 저장소에 배치해야합니다.
jww

@jww-이것은 해당 질문의 중복이 아닙니다. openssl을 사용하여 인증서를 만들 필요가 없으므로 다른 도구를 사용하여 만들 수 있습니다.
Brad Parks

1
@BradParks-Hmmm ... 질문에 OpenSSL 태그가 지정되었으며 허용 된 답변은 OpenSSL을 사용합니다. OpenSSL 태그를 다시 열고 제거했습니다.
jww

답변:


104

이 문제를 해결하려면 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 오류를 무시하도록 지시 할 수 있습니다. 수퍼 유저


2
사용중인 XAMPP 버전은 확실하지 않지만 해당 파일에서 "openssl x509"가 포함 된 행을 찾으면 파일의 해당 행 끝에 위의 내용을 추가 할 수 있습니다. 예를 들어,이 버전의 makecert.bat 는 9 행에 있으며 결국 다음과 같이 bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 -sha256 -extfile v3.ext됩니다. 물론 v3.ext 동일한 폴더의 파일에 를 저장해야 합니다.
Brad Parks

1
나는 모든 것을 시도한 후 크롬을 포기하고 다른 브라우저로 계속했습니다. 며칠 후, 오늘 크롬으로 확인했는데 작동합니다 !!! Chrome에 버그가있을 수 있으며 수정했습니다. 주체 대체 이름 누락에 대한 방법이 작동합니다 !!!! 브라우저의 신뢰할 수있는 루트 인증서 아래에 인증서를 추가하기 만하면됩니다.
Tarik

35
나는 얻고있다 unknown option -extfile. 이 문제를 어떻게 해결합니까?
Nick Manning 17

2
@NickManning- extfile잘못된 openssl 명령에서 지시문을 사용하고 있습니까? 에서 사용되는 대신에서 openssl req -new ...사용됩니다 openssl x509 -req .... 적어도 여기에 누군가가 말한 것입니다. 이 인증서를 완전히 생성하는 방법에 대한 유사한 질문에 대한 또 다른 답변에서 내가 가진 예
Brad Parks

2
"openssl에 추가 매개 변수를 제공하십시오"구체적으로 어떤 명령에 대해? 여러 단계가 관련되어
있으며이

34

다음 솔루션은 크롬 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

2
대단합니다! 정확히 내가 필요로했고 회사 이름과 주와 같은 성가신 메시지도 생략합니다.
coredumperror

2
나는 거기에 몇 가지 대체 솔루션을 시도했지만 이것이 나를 위해 일한 유일한 솔루션입니다. 고마워!!
Mirko

1
당신은 명령 줄에서 주제를 전달할 수있는 OpenSSL REQ ... -subj "/C=US/ST=VA/L=SomeCity/O=MyCompany/CN=www.company.com"
야로슬라프 Záruba

크롬으로 어떻게 가져 왔나요? 여기 basicConstraints = CA:true실종 되지 않았 나요?
woodz

19

Bash 스크립트

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

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

chrome://restart



기타 리소스

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


2
여기에 스크립트를 추가하고 설명해야합니다.
jww

멋진 스크립트처럼 보입니다. 그러나 스크립트는 OP의 문제에 대한 실제 답변을 (직접) 제공하지 않습니다. 그의 문제가 무엇인지 설명 할 수도 있습니다.
bshea

4

나는 단순히 -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와 같은 다른 속성을 추가하여 프롬프트없이 인증서를 생성 할 수 있습니다.


3
작동하지 않습니다. 크롬 이 이런 식 으로 SAN을 인식하지 못하는 것 같습니다
mononoke

이 명령을 사용하여 OpenSSL 1.1.0b에서 "인증서 요청 문제"가 발생했습니다.
Rick

나 (윈도우) 약간 다른 구문 일 경우 : 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 *.pfx형식 :openssl.exe pkcs12 -export -out certificate.pfx -inkey certificate.key -in certificate.crt
스테판 Havránek

3

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


새 Chrome의 Windows 10에서도 작동합니다. Nginx가이 폴더에 액세스 할 수 없기 때문에 기본 Windows \ system32 폴더에서 다른 폴더로 .pem 파일을 복사해야했습니다.
vatavale

2
  • 홈 디렉토리에 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


1

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

[alt_names] DNS.1 = domainname.com

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


1

다음은 Chrome이 신뢰할 수있는 IP 인증서를 만드는 매우 간단한 방법입니다.

ssl.conf 파일 ...

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[ req_distinguished_name ]
commonName                  = 192.168.1.10

[ req_ext ]
subjectAltName = IP:192.168.1.10

물론 192.168.1.10은 Chrome이 신뢰하기를 원하는 로컬 네트워크 IP입니다.

인증서를 만듭니다.

openssl genrsa -out key1.pem
openssl req -new -key key1.pem -out csr1.pem -config ssl.conf
openssl x509 -req -days 9999 -in csr1.pem -signkey key1.pem -out cert1.pem -extensions req_ext -extfile ssl.conf
rm csr1.pem

Windows에서는 모든 클라이언트 컴퓨터의 신뢰할 수있는 루트 인증서 저장소로 인증서를 가져옵니다. Android 휴대폰 또는 태블릿에서 인증서를 다운로드하여 설치합니다. 이제 Chrome은 Windows 및 Android에서 인증서를 신뢰합니다.

Windows dev box에서 openssl.exe를 얻는 가장 좋은 위치는 "c : \ Program Files \ Git \ usr \ bin \ openssl.exe"입니다.


0

MAC이 크롬 버전 67.0.3396.99부터 내 자체 서명 된 인증서는 작업을 중단했다.

여기에 쓰여진 모든 것이 작동하지 않았습니다.

최신 정보

내 접근 방식이 오늘 작동하는지 확인할 기회가있었습니다. :). 작동하지 않는 경우이 접근 방식을 사용하고 있는지 확인하십시오.

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

[alt_names]
DNS.1 = <specify-the-same-common-name-that-you-used-while-generating-csr-in-the-last-step>
$

여기에서 복사 https://ksearch.wordpress.com/2017/08/22/generate-and-import-a-self-signed-ssl-certificate-on-mac-osx-sierra/

업데이트 종료

마지막으로 경우에만 안전한 녹색 볼 수 있었다 제거 에서 내 인증서 시스템을 , 그리고 추가지역 키 체인. (있는 경우-먼저 드롭하십시오). 그것이 맞는지 확실하지 않지만 제 경우에는 크롬을 통해 인증서를 다운로드하고 생성 날짜가 오늘인지 확인했습니다. 그래서 방금 만든 날짜입니다.

누군가가 하루를 보내는 데 도움이되기를 바랍니다.

크롬을 업데이트하지 마십시오!


0

서버 localhost를 실행하려면 CN = localhostDNS.1 = localhost.

[req]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
prompt = no
prompt = no
x509_extensions = v3_req

[req_distinguished_name]
C = BR
CN = localhost
emailAddress=contact@example.com
L = Sao Paulo
O = example.com
OU = example.com
ST = Sao Paulo

[v3_req]
authorityKeyIdentifier = keyid, issuer
basicConstraints = CA:FALSE
extendedKeyUsage = serverAuth
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.