도메인 및 하위 도메인에 대한 자체 서명 된 인증서 만들기-NET :: ERR_CERT_COMMON_NAME_INVALID


82

개발 목적으로 Windows에서 서명 된 SSL 인증서를 생성하기 위해이 튜토리얼을 따랐으며 내 도메인 중 하나에서 훌륭하게 작동했습니다 (DNS를 시뮬레이션하기 위해 호스트 파일을 사용하고 있습니다). 그런 다음 하위 도메인이 많고 각 하위 도메인에 대한 인증서를 만드는 것이 당장 고통 스러울 것이라고 생각했습니다. 그래서 Commonserverfault의 일부 답변에서 제안한 것처럼 필드 에서 와일드 카드를 사용하여 인증서를 만들려고 했습니다. 이렇게 :

Common Name: *.myserver.net/CN=myserver.net

그러나이 인증서를 신뢰할 수있는 루트 인증 기관으로 가져온 후 NET::ERR_CERT_COMMON_NAME_INVALIDChrome에서 기본 도메인 및 모든 하위 도메인에 오류 가 발생합니다 (예 : https://sub1.myserver.netand https://myserver.net.

이 서버는 myserver.net임을 증명할 수 없습니다. 보안 인증서는 * .myserver.net / CN = myserver.net입니다.

이는 구성이 잘못되었거나 공격자가 연결을 가로 채기 때문일 수 있습니다.

이 오류를 일으키는 일반 이름 필드에 문제가 있습니까?


이것도 고치려고 많은 시간을 보냈습니다. 여기에 내 대답을 참조하십시오 stackoverflow.com/questions/42816218/...
알렉스 바실 레프

답변:


20

Rahul이 말했듯이 일반적인 Chrome 및 OSX 버그입니다. 나는 과거에 비슷한 문제를 겪고있었습니다. 사실 나는 마침내 작업을 위해 로컬 사이트를 테스트 할 때 2 번의 추가 클릭을 만드는 데 지쳤습니다.

[Windows 사용]이 문제에 대한 가능한 해결 방법으로 사용 가능한 많은 자체 서명 인증서 유틸리티 중 하나를 사용 합니다 .

권장 단계 :

  1. 자체 서명 된 인증서 만들기
  2. Windows 인증서 관리자로 인증서 가져 오기
  3. 크롬 인증서 관리자에서 인증서 가져 오기
    참고 : 3 단계 경험이 문제가 해결됩니다 일단 가까운 미래에는 ETA가되지 않은 부실의 시간을 고려 ... 구글 주소 버그를 **.

    만큼 I가 크롬을 사용하는 것을 선호로 최근 Firefox Developer Edition 에서 저를 발견했습니다 . 이 문제가 없습니다.

    도움이 되었기를 바랍니다 :)

링크 한 버그는 A) OS X에만 유효하며 B) 뒤에 "."이 붙은 도메인과 관련이 있습니다. 둘 다 @Zed에 유효하지 않습니다.
필립

흠 어떤 링크일까요?
Thomas.Donnelly

크롬 버그에 대한 링크 (98627)
필립

내가 제안한 수정 사항에 관계없이 여러 번 사용했기 때문에 Windows에서도 작동합니다.
Thomas.Donnelly

"개발 용으로 Chrome을 사용하는 것을 선호하는만큼 최근 Firefox Developer Edition에서 저를 발견했습니다.이 문제는 없습니다." 자세한 내용은 여기에 동의하지 수 ..


26

해결 방법은 "subjectAltName"(X509v3 주체 대체 이름)으로 사용하는 도메인 이름을 추가하는 것입니다. OpenSSL 구성 ( /etc/ssl/openssl.cnfLinux)을 변경하고 v3_req섹션을 다음과 같이 수정하면 됩니다.

[ 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

이를 통해 -extensions v3_req새 인증서를 생성 할 때 스위치 를 사용하는 것을 잊지 마십시오 . ( OpenSSL을 사용하여 SubjectAltName으로 자체 서명 된 인증서를 생성하려면 어떻게해야합니까? 참조 )


1
의 사용법은 subjectAltName = @alt_names내 문제 를 완전히 해결했습니다. 이전에 DNS ID를 제공하여 도메인에 바인딩했습니다 CN=*.example.com. 설정 DNS.1 = example.com하고 DNS.2 = *.example.com트릭을했습니다. 이상하게도 (나에게) 2017-03-17까지 모두 작동하고 하루 만에 중단되었다는 것입니다 (대량의 Windows udates를 실행했습니다). 아무것도 이것은 단지했다, 그러나 리눅스에 나를 위해 파산하지 크롬 , 파이어 폭스윈도우 .
bossi

@bossi : 불행히도 Chrome / Ubuntu에서이 문제가 있습니다. 그리고 cert는 멋진 단일 호스트, 단일 DN (내부 GitLab 저장소)이 아닙니다.
Pawel Kraszewski

일주일 정도 전에 작동했지만 서버에서 아무것도 변경되지 않았습니다. 2 개의 다른 서버가 대소 문자 불일치로 인해 울기 시작했습니다 (인증서가 대문자, Chrome에서 주소를 소문자로 삭제)
Pawel Kraszewski

2
@bossi 당신의 Windows 버전이 베타 트랙에 있다고 장담합니다. Chrome 은 현재 베타 버전 subjectAltName 인 Chrome 58부터 인증서가없는 인증서를 더 이상 사용하지 않습니다 . 내가 그것에 대해 아무것도 보지 못했을뿐만 아니라 오류 이름이 매우 오해의 소지가 있기 때문입니다 (유효하지 않은 일반적인 이름이 아닙니다!). 나는 당신의 반대였습니다. 그것은 나를 위해 Linux에서만 발생했기 때문에 로컬 인증서 저장소를 수정하려고 몇 시간을 보냈습니다.
Tobias J

2
@TobyJ 58.0.3029.19 beta (64-bit)입니다. 올바른 subjectAltName-s로 인증서 트리를 다시 생성 했으며 이제 모든 것이 작동합니다. 그리고 동의합니다. 오류 메시지는 잘못된 것이 아니기 때문에 매우 오해의 소지 CommonName가 있습니다. "Certificate is missing a proper subjectAltName" 라는 메시지가 표시 되면 모두가 훨씬 더 행복해질 것입니다.
Pawel Kraszewski

17

openssl.conf파일 생성 :

[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

이 명령을 실행하십시오.

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

파일을 출력 app.crt하고 app.key나를 위해 일하십시오.


2
에 오타가 DNS.1 = *.myserver.net있습니다. 이어야 DNS.2 = *.myserver.net합니다. 나를 위해 잘 작동합니다.
Artem Stepin

2
Windows를 사용하는 경우 관리자로 실행중인 cmd와 다음 위치를 사용하여 git과 함께 설치된 openssl을 사용하여 수행 할 수 있습니다. "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

나는 CN = localhost, DNS.1 = localhost, DNS.2 = * .localhost : 8080을 썼고 그것은 나를 위해 작동하지 않습니다. 또 무엇을 변경해야합니까?
Esqarrouth

14

와일드 카드는 *.example.com않습니다 하지 루트 도메인을 포함 example.com하지만, 어떠한 변형 다룰 것입니다 보조 등 -domain www.example.com또는test.example.com

선호하는 방법은 Fabian의 답변 에서와 같이 주체 대체 이름을 설정하는 것이지만 Chrome은 현재 일반 이름이 주체 대체 이름 중 하나로 추가로 나열되도록 요구합니다 (그의 대답에서 올바르게 설명 됨). example.comSAN www.example.com및 에서 공통 이름을 사용 했기 때문에 최근에이 문제를 발견 test.example.com했지만 NET::ERR_CERT_COMMON_NAME_INVALIDChrome 에서 경고를 받았습니다 . example.com공통 이름 SAN 중 하나를 모두 사용하여 새 인증서 서명 요청을 생성해야했습니다 . 그런 다음 Chrome은 인증서를 완전히 신뢰했습니다. 그리고 웹 사이트 식별을위한 신뢰할 수있는 기관으로서 루트 인증서를 Chrome으로 가져 오는 것을 잊지 마십시오.


이 글을 읽는 사람이 Pantheon을 호스팅에 사용하는 경우, 플랫폼에 업로드 할 때 인증서와 관련된 일반 이름을 재구성하여이 문제를 일으키는 것 같습니다. 설정하는 동안 인증서의 일반 이름이 그대로 유지되었는지 확인하기 위해 제공하는 사용자 지정 고정 IP에 대해 테스트해야합니다.
serraosays

1
훌륭한! "와일드 카드 * .example.com은 루트 도메인 example.com을 포함하지 않지만 www.example.com 또는 test.example.com과 같은 하위 도메인의 모든 변형을 포함합니다." 이것은 제 경우에 정확히 문제였습니다. 수정 프로그램을 모두 포함하는 간단했다 DNS.1 = example.comDNS.2 = *.example.com아래 [alt_names]에를 openssl.cnf.
Ben Johnson


1

이 문제가 발생하고 위험을 감수하고 테스트하려는 모든 사람을 위해 해결책이 있습니다. Chrome에서 시크릿 모드로 이동하면 "고급"을 열고 "some.url로 진행"을 클릭 할 수 있습니다.

이것은 자신을 유지하고 개발자로서 테스트하고있는 일부 웹 사이트를 확인해야하는 경우 (그리고 아직 적절한 개발 인증서를 구성하지 않은 경우) 유용 할 수 있습니다.

물론이 오류는 웹 사이트 보안에 문제가 있음을 나타내는 프로덕션에서 웹 사이트를 사용하는 사람들을위한 것이 아닙니다.


0

이 오류에 지쳤다면. Chrome이 이렇게 작동하지 않도록 할 수 있습니다. 나는 그것이 방법이라고 말하는 것이 최선의 방법이라고 말하는 것이 아닙니다.

해결 방법으로 인증서에 subjectAlternativeName 확장이 누락 된 경우 Google 크롬이 서버 인증서의 commonName을 사용하여 호스트 이름과 일치하도록 허용하는 Windows 레지스트리 키를 만들 수 있습니다. 단, 로컬에 설치된 CA의 유효성을 검사하고 연결하는 경우에만 가능합니다. 인증서.

데이터 유형 : 부울 [Windows : REG_DWORD] Windows 레지스트리 위치 : HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome Windows / Mac / Linux / Android 기본 설정 이름 : EnableCommonNameFallbackForLocalAnchors 값 : 0x00000001 (Windows), true (Linux), true (Android), (Mac) Windows 레지스트리 키를 만들려면 다음 단계를 따르십시오.

메모장 열기 다음 내용을 복사하여 메모장에 붙여 넣습니다. Windows 레지스트리 편집기 버전 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome] "EnableCommonNameFallbackForLocalAnchors"= dword : 00000001 파일> 파일 이름으로 저장으로 이동 : any_filename.reg 파일 형식 : 모든 파일

파일의 선호하는 위치를 선택하십시오

저장을 클릭하십시오.

실행하려면 저장된 파일을 두 번 클릭하십시오.

레지스트리 편집기 경고에서 예를 클릭하십시오.

Symantec 지원 페이지에서이 정보를 찾았습니다. https://support.symantec.com/en_US/article.TECH240507.html


0

제공된 답변은 로컬 개발 및 테스트를 위해 PWA를 만드는 동안 저에게 작동하지 않았습니다 (Chrome 또는 Firefox). 생산을 위해 사용하지 마십시오! 다음을 사용할 수있었습니다.

  1. 다음 옵션이있는 온라인 인증서 도구 사이트 :
    • 일반 이름 : 시스템의 "localhost"와 IP를 모두 추가합니다 (예 : 192.168.1.12).
    • 주체 대체 이름 : "DNS"= "localhost"및 "IP"추가 = <your ip here, e.g. 192.168.1.12>
    • "CRS"드롭 다운 옵션이 "자체 서명"으로 설정 됨
    • 다른 모든 옵션은 기본값이었습니다.
  2. 모든 링크 다운로드
  3. 두 번 클릭하여 .p7b 인증서를 Windows로 가져오고 "설치"/ OSX? / 리눅스?
  4. Google의 PWA 예제를 사용하여 노드 앱에 인증서 추가 ...
    • const https = require('https'); const fs = require('fs');server.js 파일 상단에 추가
    • return app.listen(PORT, () => { ... });server.js 파일 하단에 주석 처리
    • 아래에 추가 https.createServer({ key: fs.readFileSync('./cert.key','utf8'), cert: fs.readFileSync('./cert.crt','utf8'), requestCert: false, rejectUnauthorized: false }, app).listen(PORT)

Chrome 또는 Firefox에 더 이상 오류가 없습니다.

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