자체 서명 된 와일드 카드 인증서


15

집에 pihole이 설치되어 있으므로 "이 사이트가 차단되었습니다"페이지를 표시하기 위해 자체 서버가있는 웹 사이트의 요청을 처리 할 수 ​​있기를 원합니다.

URL에 자체 서명 된 인증서를 만들고 장치에 설치 하여이 작업을 시도하고 있습니다. 인증서를 생성하는 데 사용한 명령 :

openssl genrsa 2048 > pihole.key
openssl req -new -x509 -nodes -days 36500\
    -key pihole.key \
    -subj "/C=NL/ST=Utrecht, Inc./CN=*" \
    -reqexts SAN \
    -config <(cat /etc/ssl/openssl.cnf \
        <(printf "\n[SAN]\nsubjectAltName=DNS:*,DNS:*")) \
    -out pihole.cert
openssl x509 -noout -fingerprint -text < pihole.cert > pihole.info
cat pihole.cert pihole.info > pihole.pem
service apache2 reload

이 인증서를 Windows 장치에 설치했는데 Windows에서 유효한 인증서임을 보여줍니다.

그러나 크롬은 나에게 NET::ERR_CERT_COMMON_NAME_INVALID, 가장자리는 비슷한 오류를줍니다 ( DLG_FLAGS_SEC_CERT_CN_INVALID)

왜 이런거야? 되어 CN = *단지 허용되지? 원하는 것을 어떻게 얻을 수 있습니까?


참고로 : 주요 웹 사이트의 경우 브라우저에서 생성 한 인증서를 수락하지 않을 수 있습니다. 이러한 사이트는 인증서 고정을 사용하고 해당 브라우저에 포함하기 위해 TLS 인증서의 지문을 제출합니다. 인증서가 저장된 지문과 일치하지 않아 차단됩니다. 여기에 더 많은 정보가 있습니다 : noncombatant.org/2015/05/01/about-http-public-key-pinning
Martijn Heemels

자체 서명 된 인증서는 발견 한대로 문제가 될 수 있습니다. 대신 letsencrypt.org에서 "적절한"인증을받는 것을 볼 수 있습니다. 무료이며 와일드 카드를 지원합니다. 실제로 필요한 호스트 수에 따라 letencrypt의 하나 이상의 인증서가이를 처리 할 수 ​​있습니다
Dave Smylie

2
@DaveSmylie 그것은 adblocker를위한 것입니다, 나는 도메인을 소유하지 않습니다.
Daniël van den Berg 5

1
@Stewart 내 이전 의견을 읽으십시오.
Daniël van den Berg

1
참고 사항 : 애드 블로커에이를 사용하는 경우 대체 페이지를 표시하는 대신 관련 서버에 대한 연결을 자동으로 삭제하는 것이 좋습니다. 최신 광고의 90 %가 처음에 자바 스크립트를 통해로드되므로 대체 페이지가 실제로 페이지에 표시되지 않을 수 있습니다. 아마도 자바 스크립트가 아닌 리소스를 자바 스크립트로로드하려고 할 때 실제로 문제가 발생할 수 있습니다.
Nzall

답변:


38

허용되지 않습니다. 표준 TLS 호스트 이름 유효성 검사에 프로토콜별로 추가 된 모든 주요 웹 브라우저 (HTTPS 클라이언트)는 기본적으로 와일드 카드 인증서를 "eTLD + 1"로 제한하는 데 동의했습니다. 즉, "효과적인 TLD"에 하나 이상의 -와일드 카드 구성 요소.

일반적으로 이것은 적어도 두 가지 구성 요소가 필요하다는 의미 *.example.net입니다 (괜찮지 만 *.net아닙니다 *). "효과적인 TLD"규칙 co.uk은 사람들이 실제로 분리 할 수없는 "TLD"로 사용함에 따라 이를 다단계 접미사로 확장합니다 . ( *.example.ac.uk그렇지만 허용되지 *.ac.uk는 않습니다.)

공개 접미사 목록ChromiumMozilla 에서 어떻게 구현 되는지 확인할 수 있습니다 .

CA-Browser Forum Baseline Requirements (공개 WebPKI CA에만 적용되지만 여전히 일반 구현을 반영)에서 인용 한 Security.SE 관련 토론을 참조하십시오 .

CA는“레지스트리 제어”레이블 또는“공개 접미사”의 왼쪽에서 첫 번째 레이블 위치에 와일드 카드 문자가 나타나는 모든 인증서를 취소해야합니다.


이 제한을 피하려면 방문하려는 모든 웹 사이트에 대해 "주문형"인증서를 발급 하는 인증 기관 을 구축 하십시오. 나는 그것이 일반적인 웹 서버에서 어떻게 구현 될지 모르지만, 이것은 상용 TLS 차단 시스템에서 사용되는 일반적인 방법입니다. 바이러스 백신 프로그램 및 기타 맬웨어; Burp Proxy 제품군과 같은 개발 도구.

예를 들어 OpenResty 웹 서버 (기본적으로 Nginx-with-Lua) 에는ssl_certificate_by_lua 동적 인증서 생성을 구현할 수 있는 옵션 이 있습니다. Squid 프록시는 ssl-bump 기능에서 인증서 모방 을 지원 합니다.

또한 SAN 이 둘 다 있으면 Subject-CN을 완전히 대체 합니다. 이것은 클라이언트 소프트웨어가 너무 오래되어 SAN 지원이 부족한 경우를 제외하고 CN을 대부분 중복으로 포함시키고 공용 CA의 경우 웹 브라우저는 더 이상 허용하지 않습니다.


나는 이미 이전 프로젝트에서 TLD + 1 한계를 경험적으로 찾았습니다. 배치 해 주셔서 감사합니다. +1
Rui F Ribeiro

정교한 답변에 감사드립니다. 그렇습니다. 내가 사용할 수있는 다른 접근법을 알고 있습니까?
Daniël van den Berg

23
"및 기타 맬웨어"의 전략적 배치를 위해 찬성했습니다.
Džuris

@ DaniëlvandenBerg : 게시물 자체에서 하나를 제안했습니다. 방금 Nginx 및 Squid 예제에 대한 링크를 추가했습니다.
grawity

4

단지 인증서 하나의 와일드 카드가있을 수 있습니다 (즉 없음 *.*.example.com),이 (즉, 오직 단 하나의 레이블을 일치시킬 수 있습니다 www, 없습니다 www.example.com그것은 단지 왼쪽 위치에있을 수 있습니다) (예 : *.www.example.com하지만를 www.*.example.com) 그것은 대중 접미사 내부 될 수 없다 (즉 아니오 *.com).

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