30 일마다 LetsEncrypt 인증서를 갱신하도록 cronjob을 설정할 때 공개 키 핀을 설정할 수 있습니까?
인증서가 갱신되면 공개 키 핀도 갱신됩니까?
답변
주의해야 할 몇 가지 단어는 다음과 같습니다.
- HPKP를 구현하려는 경우 수행중인 작업을 확인하십시오.
- 제대로 관리하지 않거나 통제 할 수없는 “나쁜 일이 발생하면”도메인을 사용할 수 없게 만들 수 있습니다.
- 중요하지 않은 도메인 또는 매우 짧은 캐시 시간 (예 : 10 초)으로 설정을 테스트해야합니다.
- 고정하려는 인증서에 대해 생각하십시오 : 루트, 중간, 잎 …
- 다른 (백업) 인증 기관을 고정하는 것이 의미가 있는지 중간 인증서와 리프 인증서 인 경우를 생각해보십시오.
- 미안보다 안전합니다. 다른 백업 CA / 인증서를 고정하는 것이 합리적 일지 생각해보십시오.
- 이러한 점과 질문이 당신에게 “새로운”소리 경우 읽기 무엇 HPKP는 대한 공통 함정과주의 사항입니다 전에 당신이 이것을 구현한다.
LetsEncrypt와 함께 공개 키 핀을 사용할 수 있습니까?
- 예.
인증서가 갱신되면 공개 키 핀도 갱신됩니까?
- 이것은 어떤 인증서를 참조하고 어떤 인증서를 고정하는지에 따라 다릅니다.
답변
gf_가 말한 모든 것을 반향 할 것입니다.
그러나 질문에 대답하기 위해 그렇습니다.
기본적으로 Let ‘s Encrypt는 갱신시 키와 인증서를 다시 만듭니다. 따라서 리프를 고정하려는 경우 HPKP를 구현하기가 어려워집니다. 이는 2016 년 3 월과 같이 중간 변경이 필요한 경우에 수행해야합니다 .
따라서 여전히 HPKP를 수행하려는 경우 다음과 같은 몇 가지 옵션이 있습니다.
- 리프 키가 변경되지 않도록 매번 CSR을 생성하는 표준 클라이언트 대신 고유 한 고정 CSR을 사용하십시오. 이 블로그 게시물 에서는 작성자가 HPKP를 사용하기 때문에이를 구체적으로 수행하는 방법에 대해 설명합니다.
- 짧은 HPKP 만료를 사용하고 만료 시간 내에 갱신하고 인증서를 실제로 변경하기 전에 이전 키와 새 키를 모두 갖도록 정책을 변경하십시오. 방문자가 새 정책을 선택할 수있는 충분한 시간이 있습니다.
- 리프 또는 인증서 대신 Let ‘s Encrypt 루트를 고정하십시오.
답변
방금 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를 사용하여 탈수하는 데 도움이되는 몇 가지 스크립트를 작성했습니다.