Jawaban:
Beberapa kata hati-hati untuk memulai dengan:
Bisakah saya menggunakan Pin Kunci Publik dengan LetsEncrypt?
Jika sertifikat diperpanjang maka Public-Key-Pin juga diperpanjang bukan?
Akan mengulangi semua yang dikatakan gf_.
Namun, untuk menjawab pertanyaan, ya Anda bisa.
Secara default Let's Encrypt membuat ulang kunci dan sertifikat saat pembaruan. Ini membuat penerapan HPKP sulit jika Anda ingin menyematkan daun, yang mungkin harus Anda lakukan jika terjadi perubahan sedang ( seperti yang terjadi pada Maret 2016 ).
Jadi Anda memiliki beberapa opsi untuk ini jika Anda masih ingin melakukan HPKP:
Saya baru saja mengimplementasikan ini menggunakan klien dehidrasi dengan validasi dns01. Hook dns01 pasti karena DNS kami dihosting di Azure.
Sunting: ketika saya berbicara tentang kunci pribadi, jelas saya selalu berarti bahwa Anda hanya mengubah bagian-bagian kunci publik menjadi pin. Kunci pribadi, seperti namanya, harus selalu tetap pribadi. Lihat kait saya sendiri untuk detail implementasi.
Anda perlu rollover kunci pribadi untuk memungkinkan ini. Artinya, Anda selalu memiliki kunci privat saat ini (sebut saja A) dan kunci privat yang akan datang (sebutlah B), sehingga Anda dapat menambahkan keduanya ke pin Anda. Jadi pada titik ini pin Anda adalah A dan B. Ketika hari pembaruan cert datang, kunci pribadi A menjadi usang dan B menjadi hidup. Pada saat yang sama Anda mendapatkan kunci privat masa depan yang baru, sebut saja C. Anda membuat ulang daftar pin Anda sehingga sekarang mengandung B dan C. Jadi itulah cara Anda menggulirkan kunci pribadi Anda. dehidrasi mendukung ini sekarang .
Selain itu, Anda memerlukan pengait yang disebut setiap kali Anda memperbarui sertifikat dan dengan demikian menggulingkan kunci pribadi Anda. Saya menerapkan ini sendiri .
Akhirnya, jika saya melakukan ini dengan benar, Anda harus memastikan bahwa:
HPKP age x 2 < days between cert renewals
Misalnya, jika usia HPKP Anda adalah 50 hari dan Anda memperbarui sertifikat setiap 30 hari, klien yang mengunjungi situs Anda pada hari pertama akan terjebak dengan kunci pribadi A dan B, dan Anda berguling ke B dan C pada hari ke-31. server memiliki B dan C, klien memiliki A dan B, ada kecocokan bahkan pada hari ke-50 dan klien membuka situs dengan benar.
TAPI mari kita lihat apakah usia HPKP adalah 70 hari. Anda memperbarui sertifikat setiap 30 hari, dan klien mengunjungi situs Anda pada hari pertama, jadi sekali lagi, itu hanya memiliki kunci pribadi A dan B. Anda berguling ke B dan C pada hari 31, dan berguling ke C dan D pada hari ke-61 Server Anda memiliki C dan D, klien memiliki A dan B, tidak ada kecocokan dan klien diberikan jari tengah dari hari 61 hingga hari 71, ketika kebijakan HPKP-nya berakhir.
Pilihan lain, mungkin lebih aman, dan tentu saja jauh lebih sederhana adalah menggunakan kunci privat yang sama setiap kali dan menghasilkan satu atau beberapa kunci privat cadangan, kemudian meng-hardcoding ini ke dalam konfigurasi HPKP Anda dan selesai dengan itu.
Ya, itu rumit dan mungkin ada peringatan yang belum saya pikirkan, tapi kita akan lihat dalam jangka panjang. Jelas saya menyebarkannya di subdomain tidak kritis dengan umur HPKP pendek (15 hari) sehingga tidak menyebabkan masalah besar.
Sunting: Saya telah menulis beberapa skrip untuk membantu Anda mengatur HPKP dengan Let's Encrypt dan dehidrasi menggunakan Nginx: