LetsEncrypt와 함께 공개 키 핀을 사용할 수 있습니까?


답변:


12

주의해야 할 몇 가지 단어는 다음과 같습니다.

  • HPKP를 구현하려는 경우 수행중인 작업을 확인하십시오.
  • 제대로 관리하지 않거나 통제 할 수없는 "나쁜 일이 발생하면"도메인을 사용할 수 없게 만들 수 있습니다.
  • 중요하지 않은 도메인 또는 매우 짧은 캐시 시간 (예 : 10 초)으로 설정을 테스트해야합니다.
  • 고정하려는 인증서에 대해 생각하십시오 : 루트, 중간, 잎 ...
  • 다른 (백업) 인증 기관을 고정하는 것이 의미가 있는지 중간 인증서와 리프 인증서 인 경우를 생각해보십시오.
  • 미안보다 안전합니다. 다른 백업 CA / 인증서를 고정하는 것이 합리적 일지 생각해보십시오.
  • 이러한 점과 질문이 당신에게 "새로운"소리 경우 읽기 무엇 HPKP는 대한 공통 함정과주의 사항입니다 전에 당신이 이것을 구현한다.

LetsEncrypt와 함께 공개 키 핀을 사용할 수 있습니까?

  • 예.

인증서가 갱신되면 공개 키 핀도 갱신됩니까?

  • 이것은 어떤 인증서를 참조하고 어떤 인증서를 고정하는지에 따라 다릅니다.

9

gf_가 말한 모든 것을 반향 할 것입니다.

그러나 질문에 대답하기 위해 그렇습니다.

기본적으로 Let 's Encrypt는 갱신시 키와 인증서를 다시 만듭니다. 따라서 리프를 고정하려는 경우 HPKP를 구현하기가 어려워집니다. 이는 2016 년 3 월과 같이 중간 변경이 필요한 경우에 수행해야합니다 .

따라서 여전히 HPKP를 수행하려는 경우 다음과 같은 몇 가지 옵션이 있습니다.

  1. 리프 키가 변경되지 않도록 매번 CSR을 생성하는 표준 클라이언트 대신 고유 한 고정 CSR을 사용하십시오. 이 블로그 게시물 에서는 작성자가 HPKP를 사용하기 때문에이를 구체적으로 수행하는 방법에 대해 설명합니다.
  2. 짧은 HPKP 만료를 사용하고 만료 시간 내에 갱신하고 인증서를 실제로 변경하기 전에 이전 키와 새 키를 모두 갖도록 정책을 변경하십시오. 방문자가 새 정책을 선택할 수있는 충분한 시간이 있습니다.
  3. 리프 또는 인증서 대신 Let 's Encrypt 루트를 고정하십시오.

1
좋은 추가, +1.
gf_

뿌리를 고정하는 것이 안전합니까? MITM의 경우 자체 Let 's Encrypt 인증서를 사용하는 것이 정말 쉽습니다.
melbic

2
공격자가 Let 's Encrypt를 사용하여 도메인 이름에 대한 인증서를 얻는 것이 "정말 쉬운"방법은 무엇입니까? 그렇게하는 방법을 모릅니다. 그러나 도메인 유효성 검사 절차에 버그가있는 경우 모든 CA에서 가능할 있습니다 . LE 루트를 고정함으로써 전 세계의 모든 CA와 달리 공격 영역을 크게 Let 's Encrypt로 줄였습니다. 리프를 고정시키는 것만 큼 안전하지는 않지만 동의하지만 그것은 그 자체의 위험을 초래하므로 "안전"의 정의에 달려 있습니다.
Barry Pollard

HPKP에 대한 대규모 위험이 있다고 생각한다고 말하면 (자기 자살의 관점에서) 팬이 아닙니다. CA를 변경하거나 인증서 경로 변경 (예 : SHA-256 감가 상각으로 인해)을 변경하거나 긴급하게 인증서를 다시 발행해야하거나 백업 키가 손상 / 분실되거나이를 설정 한 사람이 떠나서 다음 사람이 인식하지 못하는 경우 그들은 HPKP를 사용하거나 알지 못합니다. HPKP는 또한 Superfish와 같은 로컬 루트로부터 보호하지 않습니다. 따라서 대부분의 사이트에서 HPKP는 너무 복잡하여 IMHO는 보안을 조금만 추가해도 추가 보호를받을 가치가 없습니다. 하지만 그건 내 의견 일뿐입니다.
Barry Pollard

나는 모든 LE 인증서가 동일한 루트 인증서를 가지고 있다고 생각했기 때문에 물었습니다. 따라서 다른 LE 인증서로 다른 사람에게 루트를 고정하면 MITM을 사용하고 자체 인증서로 가짜를 만들 수 있습니다. 내말 이해 했니?
melbic

5

방금 dns01 유효성 검사와 함께 탈수 된 클라이언트를 사용하여 이것을 구현했습니다 . DNS가 Azure에서 호스팅되므로 dns01 후크는 인증 입니다.

편집 : 개인 키에 대해 말할 때 분명히 공개 키 부분 만 핀으로 바꾼다는 것을 의미합니다. 이름에서 알 수 있듯이 개인 키는 항상 개인 키로 유지 되어야합니다 . 구현 세부 사항은 내 자신의 후크를 참조하십시오.


이를 가능하게하려면 개인 키 롤오버가 필요합니다. 즉, 항상 현재 개인 키 (A라고 함)와 미래 개인 키 (B라고 함)가 있으므로 핀에 모두 추가 할 수 있습니다. 따라서이 시점에서 핀은 A와 B입니다. 인증서 갱신 날짜가되면 개인 키 A는 더 이상 사용되지 않고 B는 활성화됩니다. 동시에 새로운 미래의 개인 키를 C라고 부릅니다. 이제 핀 목록을 다시 생성하여 B와 C를 포함합니다. 그래서 개인 키를 롤오버하는 방법입니다. 탈수 된 지금 이것을 지원합니다 .

또한 인증서를 갱신 할 때마다 호출되어 개인 키를 롤오버 할 후크가 필요합니다. 나는 이것을 스스로 구현했다 .

마지막으로, 내가 올바르게 이해하면 다음을 확인해야합니다.

HPKP age x 2 < days between cert renewals

예를 들어, HPKP 연령이 50 일이고 30 일마다 인증서를 갱신하는 경우 하루에 사이트를 방문한 클라이언트는 개인 키 A와 B로 고정되며 31 일에 B와 C로 롤오버됩니다. 서버에는 B와 C가 있고 클라이언트에는 A와 B가 있으며 50 일에도 일치하고 클라이언트는 사이트를 올바르게 엽니 다.

그러나 HPKP 연령이 70 일인지 확인해 봅시다. 30 일마다 인증서를 갱신하고 클라이언트가 첫날에 사이트를 방문 했으므로 개인 키 A와 B 만 있습니다. 31 일에 B와 C로 롤오버하고 61 일에 C와 D로 롤오버되었습니다. 서버에는 C와 D가 있고 클라이언트에는 A와 B가 있으며 일치하는 항목이 없으며 클라이언트는 HPKP 정책이 만료되는 61 일부터 71 일까지 가운데 손가락을받습니다.


더 안전하고 확실히 더 간단한 또 ​​다른 옵션은 매번 동일한 개인 키를 사용하고 하나 또는 여러 개의 백업 개인 키를 생성 한 다음 HPKP 구성으로 하드 코딩하고 완료하는 것입니다.


그래, 까다 롭고 내가 생각하지 않은주의 사항이있을 수 있지만 장기적으로 볼 수 있습니다. 분명히 HPKP 수명이 짧은 (15 일) 중요하지 않은 하위 도메인에 배포하여 큰 문제를 일으키지 않았습니다.


편집 : Let 's Encrypt로 HPKP를 설정하고 Nginx를 사용하여 탈수하는 데 도움이되는 몇 가지 스크립트를 작성했습니다.

HPKPinx


3
나는 두 세계 모두를 최대한 활용하기로 결정했습니다. 자동화 된 개인 키 롤오버 + 정적 개인 키. 관심이 있다면 블로그 게시물을 작성하십시오.
bviktor

1
이 경우 게시물을 수정하고 링크를 삽입하십시오-감사합니다!
gf_

감사합니다. 이번 주 또는 다음 주에 마무리하기 위해 최선을 다하겠습니다.
bviktor

2
링크가 추가되었습니다. 문서는 아직 부족하지만 코드를 사용하여 시도해 볼 수 있습니다.
bviktor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.