답변:
주의해야 할 몇 가지 단어는 다음과 같습니다.
LetsEncrypt와 함께 공개 키 핀을 사용할 수 있습니까?
인증서가 갱신되면 공개 키 핀도 갱신됩니까?
gf_가 말한 모든 것을 반향 할 것입니다.
그러나 질문에 대답하기 위해 그렇습니다.
기본적으로 Let 's Encrypt는 갱신시 키와 인증서를 다시 만듭니다. 따라서 리프를 고정하려는 경우 HPKP를 구현하기가 어려워집니다. 이는 2016 년 3 월과 같이 중간 변경이 필요한 경우에 수행해야합니다 .
따라서 여전히 HPKP를 수행하려는 경우 다음과 같은 몇 가지 옵션이 있습니다.
방금 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를 사용하여 탈수하는 데 도움이되는 몇 가지 스크립트를 작성했습니다.