Câu trả lời:
Một số lời cảnh báo để bắt đầu:
Tôi có thể sử dụng Ghim khóa công khai với LetsEncrypt không?
Nếu chứng chỉ được gia hạn thì Khóa công khai cũng được gia hạn phải không?
Sẽ lặp lại mọi thứ mà gf_ đã nói.
Tuy nhiên, để trả lời câu hỏi, có bạn có thể.
Theo mặc định, Let Encrypt tạo lại khóa và chứng chỉ khi gia hạn. Điều này làm cho việc triển khai HPKP trở nên khó khăn nếu bạn muốn ghim vào chiếc lá, điều mà bạn có thể nên làm trong trường hợp thay đổi trung gian ( giống như đã làm trong tháng 3 năm 2016 ).
Vì vậy, bạn có một số tùy chọn xung quanh điều này nếu bạn vẫn muốn làm HPKP:
Tôi chỉ thực hiện điều này bằng cách sử dụng máy khách bị mất nước với xác nhận dns01. Móc dns01 là certzure vì DNS của chúng tôi được lưu trữ trong Azure.
Chỉnh sửa: khi tôi nói về khóa riêng, rõ ràng tôi luôn có nghĩa là bạn chỉ biến các bộ phận khóa công khai thành chân. Các khóa riêng, như tên cho thấy, phải luôn được giữ riêng tư. Xem móc của riêng tôi để biết chi tiết thực hiện.
Bạn cần cuộn qua khóa riêng để thực hiện điều này. Nghĩa là, bạn luôn có khóa riêng hiện tại (gọi là A) và khóa riêng trong tương lai (gọi là B) trong tay, để bạn có thể thêm cả hai vào chân của mình. Vì vậy, tại thời điểm này, các chân của bạn là A và B. Khi ngày gia hạn chứng chỉ đến, khóa riêng A trở nên lỗi thời và B trở nên sống động. Đồng thời bạn nhận được một khóa riêng trong tương lai mới, hãy gọi nó là C. Bạn tạo lại danh sách mã pin của mình để bây giờ nó chứa B và C. Vì vậy, đó là cách bạn cuộn các khóa riêng của mình. mất nước hỗ trợ này bây giờ .
Ngoài ra, bạn cần một cái móc được gọi mỗi khi bạn làm mới certs của mình và do đó cuộn qua các khóa riêng của bạn. Tôi thực hiện điều này một mình .
Cuối cùng, nếu tôi hiểu đúng, bạn phải chắc chắn rằng:
HPKP age x 2 < days between cert renewals
Ví dụ: nếu tuổi HPKP của bạn là 50 ngày và bạn gia hạn certs cứ sau 30 ngày, một khách hàng truy cập trang web của bạn vào ngày thứ nhất sẽ bị kẹt với khóa riêng A và B, và bạn đã chuyển sang B và C vào ngày 31. máy chủ có B và C, máy khách có A và B, có một trận đấu ngay cả vào ngày 50 và máy khách mở trang web một cách chính xác.
NHƯNG hãy xem tuổi HPKP là 70 ngày. Bạn gia hạn certs cứ sau 30 ngày và khách hàng đã truy cập trang web của bạn vào ngày đầu tiên, vì vậy, một lần nữa, nó chỉ có khóa riêng A và B. Bạn đã chuyển sang B và C vào ngày 31, và chuyển sang C và D vào ngày 61 Máy chủ của bạn có C và D, máy khách có A và B, không có kết quả trùng khớp và máy khách được cung cấp ngón giữa từ ngày 61 đến ngày 71, khi chính sách HPKP của nó hết hạn.
Một tùy chọn khác, có thể an toàn hơn và chắc chắn đơn giản hơn nhiều là sử dụng cùng một khóa riêng mỗi lần và tạo một hoặc một vài khóa riêng dự phòng, sau đó mã hóa chúng vào cấu hình HPKP của bạn và được thực hiện với nó.
Vâng, đó là khó khăn và có thể có những cảnh báo tôi chưa từng nghĩ đến, nhưng chúng ta sẽ thấy trong thời gian dài. Rõ ràng là tôi đã triển khai nó trên một tên miền phụ không chính xác với tuổi HPKP ngắn (15 ngày) để nó không gây ra rắc rối lớn.
Chỉnh sửa: Tôi đã viết một vài tập lệnh để giúp bạn thiết lập HPKP với Let Encrypt và khử nước bằng Nginx: