letencrypt 대신 DNS 레코드를 통해 자체 서명 된 인증서의 유효성을 검사하지 않는 이유


16

나는 단지 궁금했다. 우리는 많은 SSL 인증서를 사용합니다. 요즘에는 거의 독점적으로 letencrypt (감사합니다!)를 사용합니다. 이러한 인증서의 결론은 인증서에서 도메인 이름의 소유권 증명이 도메인에서 DNS 레코드 나 웹 사이트를 조작 할 수 있다는 것입니다. DNS 증거는 DNS에 TXT 레코드로 일부 키 (letencrypt가 제공함)를 추가하여 제공됩니다.

따라서 도메인의 DNS 레코드를 변경할 수 있다는 충분한 증거가 있다면 DNS의 지문으로 자체 서명 된 인증서를 사용하지 않는 이유는 무엇입니까?

이것이 DNS 기반 letencrypt (및 기타 CA)의 절차와 정확히 같은 양의 신뢰를 제공한다고합니다.

  1. 자체 서명 된 CA를 작성하십시오 (다양한 방법의 단계를 따르십시오).
  2. 일부 도메인에 대한 인증서 생성
  3. 1 단계의 CA로 2 단계의 인증서에 서명하십시오. 이제 신뢰할 수없는 CA가 서명 한 기본 인증서가 있습니다.
  4. TXT (또는 전용) 레코드를 각 도메인의 DNS에 추가하여 다음과 같이 명시합니다.이 도메인에이 CA의 인증서를 서명했습니다. 'CA =-핑거 핀트'
  5. 브라우저는 인증서를 다운로드하고 CA / CA 인증서의 지문을 지정된 도메인의 DNS 데이터와 비교하여 인증서를 확인합니다.

이를 통해 기본 SSL 인증서와 동일한 트러스트 수준의 타사 간섭없이 신뢰할 수있는 자체 서명 된 인증서를 만들 수 있습니다. DNS에 액세스 할 수 있으면 인증서가 유효합니다. 암호화와 같은 DNSSEC를 추가하여 CA 레코드와 SOA 레코드를 해시하여 DNS 레코드 변경시 신뢰가 사라지는 것을 확인할 수도 있습니다.

이것은 이전에 고려 되었습니까?

옐머



감사합니다 Håkan! 업데이트를 통해이 RFC에 대한 용어 DANE를 찾았습니다. RFC의 마지막 버전 : tools.ietf.org/html/rfc7671 참조 : en.wikipedia.org/wiki/… (나중에 읽어 볼 것).
Jelmer Jellema

2
RFC Håkan 링크에서도 "왜 그렇지 않습니까?"를 다룹니다. DNSSEC가 없으면 DNS 고유의 취약점으로 인해 전체 모델의 안정성이 손상됩니다. 또한 DNSSEC는 클라이언트와 재귀 시스템 사이의 트래픽을 보호하기 위해 아무 것도 수행하지 않으며, 이는 중간 스푸핑의 사람에게는 여전히 취약합니다.
Andrew B

Andrew, DNSSEC가 도메인에 대해 강제되지 않은 경우 DNSSEC 및 MIDM에 문제가 있으며 루트 도메인 서버를 tld에 대해 확인하여 모든 조회를 수행하는 경우에만 강제 수행 할 수 있습니다. 따라서 문제는 : 소유자에게 유효성을 명시하여 일부 DV 인증서 사용을 승인하려고하지만 계층 적 특성으로 인해 DNS를 신뢰할 수 없습니다. DNS가 스푸핑 및 MIDM 공격에 취약하다는 사실은 DV 인증서를 도메인 항목의 외부 유효성 검사로 분류합니다. 흠, 나는 계속 생각할 것이다 ...
Jelmer Jellema

답변:


18

이를 가능하게하는 기본 인프라가 존재하며 이름 기반 엔티티의 DNS 기반 인증 (DANE)이라고하며 RFC6698에 지정되어 있습니다 . TLSA체인에있는 엔드 엔터티 또는 해당 CA 중 하나의 인증서 또는 공개 키를 지정 하는 리소스 레코드 를 통해 작동 합니다 (실제로 4 가지 유형이 있습니다. 자세한 내용은 RFC 참조).

양자

그러나 DANE는 아직 널리 채택되지 않았습니다. 베리사인은 모니터 DNSSEC 및 DANE 채택 하고 시간이 지남에 따라 성장을 추적 :

6 월 17 일 사이의 전세계 TLSA 배포

비교를 위해 VeriSign에 따르면 약 270 만 개의 DNS 영역이 존재하므로 모든 영역의 1 % 이상이 하나 이상의 TLSA 레코드를 가지고 있음을 의미합니다.

나는 왜 DANE인가에 대한 정답을 줄 수는 없지만 내 추측은 다음과 같습니다.

DANE는 CRL (Certificate Revocation List) 및 OCSP (Online Certificate Status Protocol)와 같은 문제가 있습니다. 제시된 인증서의 유효성을 확인하려면 타사에 문의해야합니다. Hanno Böck 은 좋은 개요를 제공하는데 , 이것이 실제로 큰 문제인 이유입니다. 그것은 당신이 제 3 자에게 연락 할 수 없을 때해야 할 일의 문제로 요약됩니다. 브라우저 공급 업체 는이 경우 소프트 실패 (일명 허가)를 선택했습니다. 이로 인해 모든 것이 무의미 해지고 Chrome은 궁극적으로 2012 년에 OCSP를 사용 중지하기로 결정했습니다.

DNSSEC

틀림없이 DNS는 CA의 CRL 및 OCSP 서버보다 훨씬 더 나은 가용성을 제공하지만 여전히 오프라인 확인이 불가능합니다. 또한 DANE는 DNSSEC와 함께 사용해야합니다. 일반 DNS는 인증되지 않은 UDP를 통해 작동하므로 위조, MITM 공격 등이 발생하기 쉽습니다. DNSSEC를 채택하는 것이 DANE를 채택하는 것보다 훨씬 낫지 만 여전히 보편적 인 것은 아닙니다.

그리고 DNSSEC을 사용하면 소프트 실패 문제가 다시 발생합니다. 내가 아는 한, 주요 서버 / 클라이언트 운영 체제는 기본적으로 유효성 검증 DNSSEC 분석기를 제공하지 않습니다.

그러면 취소 문제도 있습니다. DNSSEC에는 해지 메커니즘이 없으며 짧은 활성 키를 대신 사용합니다.

소프트웨어 지원

모든 참여 소프트웨어는 DANE 지원을 구현해야합니다.

이론적으로는 이것이 암호화 라이브러리의 역할이 될 것이며 응용 프로그램 개발자는 많은 일을 할 필요가 없지만 실제로는 암호화 라이브러리가 기본 요소 만 제공하고 응용 프로그램은 많은 구성과 설정을 수행해야합니다. (불행히도 문제를 일으키는 많은 방법이 있습니다).

예를 들어 주요 웹 서버 (예 : Apache 또는 nginx)가 DANE를 구현했거나이를 수행 할 계획이 있음을 모르겠습니다. 웹 서버는 웹 기술을 기반으로 점점 더 많은 것들이 구축되기 때문에 웹 서버가 특히 중요합니다.

CRL, OCSP 및 OCSP Stapling을 비교할 때 DANE 채택 사례가 어떻게 진행되는지 추론 할 수 있습니다. OpenSSL, libnss, GnuTLS 등을 사용하는 일부 응용 프로그램 만 이러한 기능을 지원합니다. Apache 또는 nginx와 같은 주요 소프트웨어가이를 지원하는 데 시간이 걸리고 Hanno Böck의 기사를 다시 참조하면 문제가 발생하여 구현에 결함이 있습니다. Postfix 또는 Dovecot와 같은 다른 주요 소프트웨어 프로젝트 는 OCSP를 지원하지 않습니다CRL 기능이 매우 제한되어 있으며 기본적으로 파일 시스템의 파일을 가리 킵니다 (필수적으로 정기적으로 다시 읽을 필요는 없으므로 서버를 수동으로 다시로드해야 함). 이들은 TLS를 자주 사용하는 프로젝트라는 점을 명심하십시오. 그런 다음 PostgreSQL / MySQL과 같이 TLS가 훨씬 덜 일반적인 것들을 살펴보고 CRL을 최대한 제공 할 수 있습니다.

그래서 나는 현대 웹 서버조차 그것을 구현하지 않았으며 대부분의 다른 소프트웨어는 OCSP와 CRL을 구현하지 않았으며 5 년 엔터프라이즈 응용 프로그램이나 어플라이언스와 행운을 빕니다.

잠재적 인 응용

그렇다면 실제로 DANE를 어디에서 사용할 수 있습니까? 현재로서는 일반 인터넷이 아닙니다. 서버와 클라이언트를 제어하는 ​​경우 옵션 일 수 있지만이 경우 종종 공개 키 고정에 의존 할 수 있습니다.

메일 공간에서 SMTP에 가장 긴 종류의 인증 된 전송 암호화가 없기 때문에 DANE가 약간의 관심을 끌고 있습니다. SMTP 서버는 때때로 서로간에 TLS를 사용했지만 인증서의 이름이 실제로 일치하는지 확인하지 않았으므로 이제 DANE를 통해이를 확인하기 시작했습니다.


6
마지막 문장이 잘린 것 같습니다.
8bittree

세바스찬 감사합니다. 당신의 반응은 매우 도움이됩니다. OP 아래의 나와 앤드류의 의견을 참조하십시오.
Jelmer Jellema

3
웹 서버가이를 구현해야하는 이유는 무엇입니까? 아파치 설정에 자체 서명 된 인증서를 추가하고 지문을 DNS에 직접 넣을 수 있습니까?
Jelmer Jellema

1
DNSSEC와 DNS의 성능 및 확장 성 문제도 있습니다. 일반 DNS는 "통조림"응답을 사용할 수 있지만 DNSSEC는 모든 요청에 ​​대해 암호화를 수행해야하며 DNS 요청이 많이 발생합니다. 많은 DNS 요청 처럼 .
Joker_vD

4
@Joker_vD DNSSEC는 트래픽이 아닌 데이터에 서명합니다. 즉, 신뢰할 수있는 목적으로 영역에 서명 할 수 있으며 서명 수명 동안 (또는 영역 데이터를 변경할 때까지) 더 많은 "암호화"를 가질 수 없습니다. 요청 당“암호화”가 발생해야하는 것은 검증 자 측 (클라이언트 측)에 있습니다. 추가 데이터와 DNSSEC 상태는 모두 일반적인 DNS 캐싱 모델에 적합합니다.
Håkan Lindqvist

5

다양한 유형의 인증서 유효성 검사 절차

일반적인 CA 서명 인증서에는 여러 가지 수준의 인증서 유효성 검사가 있습니다.

  • 도메인 유효성 검사 (DV)
    도메인 이름 소유권 만 확인되고 인증서에서 도메인 이름 만 "제목"으로 표시됩니다.
  • OV (조직 검증)
    도메인 이름과 소유자 이름이 확인되고 도메인 이름과 소유자 이름이 인증서에서 "제목"으로 표시됩니다.
  • EV (Extended Validation)
    소유자 엔티티, 도메인 이름 및 소유자 이름에 대한보다 엄격한 유효성 검사는 인증서에서 "주제"로 표시되며 소유자 이름이있는 녹색 막대

귀하가 설명하고 대체를 제안하는 프로세스는 최하위 수준의 도메인 검증 (DV)에만 적용됩니다.

DV는 LetsEncrypt가 수행 한 작업과 같이 검증이 비교적 자동화하기 쉬운 수준이며, DNS가 트러스트 앵커의 유일한 소스로 사용 된 경우 DNS가 제공 할 수있는 것과 비슷한 수준의 신뢰를 제공합니다 (UI 관련 사항, 인증서 신뢰할 수 있지만 검증되지 않은 추가 데이터를 포함해야합니다).

명명 된 엔터티의 DNS 기반 인증 (DANE)

DANE 는 DNSSEC (DNS 데이터 인증이 중요하기 때문에) 위에 구축되어 DNS의 TLS 클라이언트에 대한 트러스트 앵커 정보를 게시합니다.

그것은 사용 TLSARR 타입과 인증서 또는 공개 키 (중 하나를 식별하는 데 사용할 수있는 선택 또는도 (성공 정규 인증서 체인 유효성 검사를 필요로하지 않고, 최종 엔티티 또는 CA 중 하나의를) 인증서 사용을 )하는 방법과 CERT / key 데이터는 레코드에 표시됩니다 ( 일치 유형 ).

TLSA기록 소유자 이름이 포트와 프로토콜 (예를 나타내는 접두사를 가지고 _443._tcp)와 RData에가를 표시 cert usage, selectormatching typeCERT는 이외에 모드 / 키 데이터가 일치합니다. 이러한 매개 변수의 세부 사항은 RFC6698의 섹션 2.1을 참조하십시오 .

TLSA이 같은 예를 들어보기를위한 기록 할 수 있습니다

_443._tcp.www.example.com. IN TLSA  2 0 1 d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971

DANE 인식 ​​클라이언트는 사용 모드를 사용 2하거나 3(TLSA 트러스트 앵커 만 사용함을 나타냄) 일반적으로 신뢰할 수있는 CA가 서명하지 않았지만 TLSA레코드 와 일치하는 인증서를 수락합니다 .
이것은 개념적으로 질문에서 제안한 것과 동일합니다.

캐치? DANE 인식 ​​클라이언트는 현재 존재하지 않거나 거의 존재하지 않습니다. 한 가지 문제는 DNSSEC 자체가 DANE를 시작하는 데 필요한 것만 큼 널리 배포되지 않은 것입니다 (특히 클라이언트 컴퓨터의 유효성 검사). DANE가 인증 된 DNS 데이터에 의존하는 최초의 잠재적 인 새로운 유스 케이스 중 하나라는 점을 고려하면 약간의 닭과 계란 문제 일 수 있습니다.

DNSSEC 및 DANE validation을 추가 하는 브라우저 플러그인 이 있습니다.이 시점에서 주류 근처에는 그다지 많지 않습니다. 또한 기본적으로 지원되는 것이 아니라 플러그인이기 때문에 일반적인 용도로 사용하는 것보다 개념 증명의 역할을합니다.


할 수있었습니다. 고려되었습니다. 여전히 일어날 수 있지만 많은 움직임이 없었습니다.


감사합니다 Håkan. Andrew가 내 OP에서 지적했듯이 DNSSEC가 강제 실행되지 않기 때문에 DNS 및 DNSSEC에 문제가 있습니다 (키가 TLD DNS에 배치되어 있어도 DNS 서버가 DANE 정보를 스푸핑 할 수 있다고 생각합니다) , 권리? 따라서 DANE 레코드가 유효하려면 DNSSEC를 의무화해야합니다. 이는 각 검사마다 TLD 서버의 키도 검사해야 함을 의미합니다.
Jelmer Jellema

5
@JelmerJellema 내 대답에서 언급했듯이 DNSSEC는 클라이언트에서 확인해야하며 (Andrew가 지적한 문제는 아닙니다) 서명 된 TLSA 레코드 만 성공적으로 사용할 수 있습니다. 이 문제는 디자인 측면에서 문제가 아니며, 주류 소프트웨어의 지원 측면에서 문제입니다.
Håkan Lindqvist

2
완벽하지는 않지만 8.8.8.8 또는 9.9.9.9와 같이 ISP 또는 개방형 네임 서버에서 점점 더 많은 재귀 이름 서버가 DNSSEC 유효성 검사를 수행하고 있습니다. 언 바운드 및 / 또는 스터 비와 같은 것들을 기반으로 구축 된 dnssec- 트리거는 클라이언트에서 반드시 완전한 DNS 확인자없이 클라이언트에서 완전한 DNSSEC 유효성 검사를 허용합니다. 그러나 우리는 실제로 그것과는 거리가 멀다.
Patrick Mevzek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.