Odpowiedzi:
Kilka słów ostrożności na początek:
Czy mogę używać pinów klucza publicznego z LetsEncrypt?
Jeśli certyfikat zostanie odnowiony, odnawia się również klucz publiczny, prawda?
Powtórzyłby wszystko, co powiedział gf_.
Jednak, aby odpowiedzieć na pytanie, tak, możesz.
Domyślnie Let's Encrypt odtwarza klucz i certyfikat przy odnawianiu. Utrudnia to wdrożenie HPKP, jeśli chcesz przypiąć liść, co prawdopodobnie powinieneś zrobić w przypadku pośrednich zmian ( tak jak miało to miejsce w marcu 2016 r .).
Masz więc kilka opcji, jeśli nadal chcesz robić HPKP:
Właśnie zaimplementowałem to za pomocą odwodnionego klienta z walidacją dns01. Hak dns01 jest certyfikowany, ponieważ nasz DNS jest hostowany na platformie Azure.
Edycja: kiedy mówię o kluczach prywatnych, oczywiście zawsze mam na myśli, że zamieniasz tylko części klucza publicznego w szpilki. Klucze prywatne, jak sama nazwa wskazuje, powinny zawsze pozostać prywatne. Zobacz mój własny hak, aby uzyskać szczegóły dotyczące implementacji.
Aby to umożliwić, potrzebujesz rolowania klucza prywatnego. Oznacza to, że zawsze masz pod ręką aktualny klucz prywatny (nazywaj go A) i przyszły klucz prywatny (nazywaj go B), abyś mógł dodać oba klucze do swoich pinów. W tym momencie twoje szpilki to A i B. Kiedy nadejdzie dzień odnowienia certyfikatu, klucz prywatny A staje się przestarzały, a B zaczyna działać. W tym samym czasie otrzymujesz nowy przyszły klucz prywatny, nazywaj go C. Regenerujesz listę pinów, aby zawierała teraz B i C. W ten sposób przewracasz klucze prywatne. odwodnione obsługuje to teraz .
Potrzebny jest także hak, który jest wywoływany przy każdym odnawianiu certyfikatów, a tym samym do przewracania kluczy prywatnych. Zaimplementowałem to sam .
Wreszcie, jeśli dobrze to zrozumiem, musisz upewnić się, że:
HPKP age x 2 < days between cert renewals
Na przykład, jeśli Twój wiek HPKP wynosi 50 dni, a odnawiasz certyfikaty co 30 dni, klient, który odwiedził Twoją witrynę w pierwszym dniu, utknie z kluczami prywatnymi A i B, a ty przejdziesz do B i C w dniu 31. Twój serwer ma B i C, klient ma A i B, mecz jest nawet w dniu 50, a klient poprawnie otwiera stronę.
ALE zobaczmy, czy wiek HPKP wynosi 70 dni. Odnawiasz certyfikaty co 30 dni, a klient odwiedził Twoją witrynę pierwszego dnia, więc znowu ma tylko klucze prywatne A i B. Przeniesiono do B i C w dniu 31, a przeniesiono do C i D w dniu 61 Twój serwer ma C i D, klient ma A i B, nie ma zgodności, a klient otrzymuje środkowy palec od 61 do 71 dnia, kiedy wygasną jego zasady HPKP.
Inną, prawdopodobnie bezpieczniejszą i na pewno znacznie prostszą opcją jest użycie tego samego klucza prywatnego za każdym razem i wygenerowanie jednego lub kilku zapasowych kluczy prywatnych, a następnie zakodowanie ich na stałe w konfiguracji HPKP i gotowe.
Tak, to trudne i mogą istnieć zastrzeżenia, o których nie myślałem, ale zobaczymy na dłuższą metę. Oczywiście wdrożyłem go w bezkrytycznej subdomenie z krótkim (15 dni) wiekiem HPKP, aby nie powodował wielkich problemów.
Edycja: Napisałem kilka skryptów, które pomogą ci skonfigurować HPKP z Let's Encrypt i odwodnić za pomocą Nginx: