Rút ngắn chuỗi tin cậy của Let’s Encrypt
(letsencrypt.org)- Let’s Encrypt sẽ không gia hạn chữ ký chéo (cross-sign) hết hạn vào ngày 30 tháng 9 năm 2024, và sẽ chuyển sang chuỗi chứng chỉ ngắn kết thúc ở ISRG Root X1
- Khi mới ra mắt, do root riêng chưa được tin cậy đủ rộng, dịch vụ này phụ thuộc vào DST Root CA X3 của IdenTrust, nhưng hiện nay phạm vi tin cậy của ISRG Root X1 đã mở rộng đáng kể
- Chữ ký chéo root được bổ sung vào năm 2021 để tương thích với Android cũ chỉ là biện pháp tạm thời, và nhờ đó các thiết bị Android đời cũ có thể tiếp tục tin cậy chứng chỉ Let’s Encrypt thêm 3 năm
- Trong 3 năm gần đây, tỷ lệ thiết bị Android tin cậy ISRG Root X1 đã tăng từ 66% lên 93.9%, và khi bỏ chữ ký chéo thì số byte chứng chỉ trong bắt tay TLS cũng giảm hơn 40%
- Người dùng Android 7.0 trở xuống được khuyến nghị dùng Firefox Mobile, còn nhà vận hành website và tác giả ACME client cần kiểm tra việc xử lý chuỗi theo lịch chuyển đổi năm 2024
Bối cảnh kết thúc chữ ký chéo
- Khi mới ra mắt, để chứng chỉ được tin cậy rộng rãi, Let’s Encrypt đã ký chéo chứng chỉ trung gian bằng DST Root CA X3 của IdenTrust
- Đây là cách để các chứng chỉ do chứng chỉ trung gian đó phát hành vẫn được tin cậy, ngay cả khi root riêng ISRG Root X1 chưa được tin cậy rộng rãi
- Theo thời gian, ISRG Root X1 đã trở nên được tin cậy rộng rãi nhờ chính nó
- Cuối năm 2021, chứng chỉ trung gian được ký chéo và bản thân DST Root CA X3 đều sắp hết hạn
- Khi đó các trình duyệt hiện đại đã tin cậy root của Let’s Encrypt, nhưng hơn một phần ba thiết bị Android vẫn đang dùng các phiên bản OS cũ
- Những thiết bị này có thể đột ngột không còn tin cậy các website dùng chứng chỉ Let’s Encrypt
- Năm 2021, Let’s Encrypt đã áp dụng ký chéo trực tiếp lên root thay vì chứng chỉ trung gian, tạo ra một biện pháp tạm thời kéo dài lâu hơn DST Root CA X3
- Nhờ biện pháp này, các thiết bị Android cũ có thể tiếp tục tin cậy chứng chỉ Let’s Encrypt thêm 3 năm
- Chữ ký chéo đó sẽ hết hạn vào ngày 30 tháng 9 năm 2024
Vì sao chuyển sang chuỗi ngắn
- Let’s Encrypt sẽ không nhận chữ ký chéo mới để kéo dài khả năng tương thích nữa
- Trong 3 năm gần đây, tỷ lệ thiết bị Android tin cậy ISRG Root X1 đã tăng từ 66% lên 93.9%
- Android 14 có thể cập nhật trust store mà không cần cập nhật toàn bộ OS, nên tỷ lệ này có thể còn tăng thêm
- Việc bỏ chữ ký chéo giúp giảm hơn 40% số byte chứng chỉ được truyền trong bắt tay TLS
- Chi phí vận hành cũng giảm đáng kể, giúp Let’s Encrypt tập trung nguồn lực vào quyền riêng tư và cải thiện bảo mật
Lịch chuyển đổi năm 2024
- Thứ Năm, ngày 8 tháng 2 năm 2024: ngừng cung cấp chữ ký chéo mặc định trong các yêu cầu tới endpoint API
/acme/certificate- Với hầu hết thuê bao, ACME client sẽ cấu hình chuỗi kết thúc ở ISRG Root X1 và web server sẽ cung cấp chuỗi ngắn hơn trong bắt tay TLS
- Chuỗi dài hơn kết thúc ở chữ ký chéo sắp hết hạn vẫn có thể được yêu cầu như chuỗi thay thế
- Thứ Năm, ngày 6 tháng 6 năm 2024: ngừng hoàn toàn việc cung cấp chuỗi ký chéo dài hơn
- Thời điểm này sớm hơn ngày hết hạn chữ ký chéo hơn 90 ngày một chút, tương ứng với tuổi thọ của 1 chứng chỉ
- Đây là lịch nhằm bảo đảm thuê bao có ít nhất một chu kỳ cấp phát đầy đủ để rời khỏi chuỗi ký chéo
- Thứ Hai, ngày 30 tháng 9 năm 2024: chứng chỉ ký chéo hết hạn
- Với phần lớn người dùng, đây không nên là một sự kiện riêng biệt, và mọi sự cố phía client lẽ ra đã xảy ra trong 6 tháng trước đó
Người dùng và nhà vận hành cần kiểm tra gì
- Người dùng Android 7.0 trở xuống có thể cần hành động để tiếp tục truy cập các website được bảo vệ bằng chứng chỉ Let’s Encrypt
- Let’s Encrypt khuyến nghị cài đặt và sử dụng Firefox Mobile, ứng dụng dùng trust store riêng thay vì trust store của Android OS
- Nhà vận hành website nên kiểm tra thống kê sử dụng website và các chuỗi user-agent đang hoạt động trong quý 2 và quý 3 năm 2024
- Nếu lượng truy cập từ Android giảm đột ngột, có thể vẫn còn nhiều người dùng Android 7.0 trở xuống
- Khuyến nghị cung cấp hướng dẫn cho nhóm người dùng này về việc dùng Firefox Mobile
- Tác giả ACME client phải tải xuống và cài đặt đúng chuỗi chứng chỉ do API cung cấp ở mỗi lần cấp phát và gia hạn chứng chỉ
- Một kiểu lỗi trước đây là hoàn toàn không tải chuỗi mà chỉ cung cấp chứng chỉ end-entity
- Cũng có trường hợp không tải chuỗi mà lại cung cấp chuỗi được hardcode sẵn
- Cũng có trường hợp chỉ tải chuỗi ở lần cấp đầu tiên và không tải lại khi gia hạn
- Các câu hỏi liên quan đến quá trình chuyển đổi có thể được đặt trên community forum của Let’s Encrypt
1 bình luận
Ý kiến trên Hacker News
Nhớ là Let's Encrypt đã thông báo sẽ thực hiện chuyển đổi này vào mùa hè năm 2019, rồi sau đó nghe phản hồi từ cộng đồng và hoãn lại
Khi đó tôi là một trong những người yêu cầu họ cân nhắc lại thật kỹ, nhưng cũng không ngờ ở vấn đề này họ lại trì hoãn tới tận 4 năm rưỡi, vượt xa kỳ vọng của tôi. Cảm ơn vì đã xử lý hệ sinh thái TLS một cách thận trọng như vậy
Để bao phủ 95% thiết bị Android thì vẫn phải hỗ trợ tới Android 7.0 Nougat từ tháng 8/2016
https://en.wikipedia.org/wiki/Android_Nougat
Còn để bao phủ 95% thiết bị iOS thì chỉ cần iOS 14 từ tháng 9/2020, và ngay cả khi chỉ xét 90% thì Android là 8.1 (2017), còn iOS là 15 (2021)
https://iosref.com/ios-usage
https://en.wikipedia.org/wiki/IOS_14
Có vẻ Apple làm tốt hơn trong việc thuyết phục hoặc cho phép người dùng chuyển sang hệ điều hành mới hơn
Lý do thiết bị không được cập nhật là vì nhà sản xuất ngừng cung cấp cập nhật
Theo trang về gói CA của curl, gói Mozilla khi giải nén chỉ khoảng 200KB, còn ứng dụng Chrome trên Android của tôi là 25MB, nên tăng kích thước ứng dụng thêm 1% để luôn cập nhật có vẻ khá hợp lý
Tất nhiên các ứng dụng khác cũng có thể muốn CA mới nhất, nhưng cũng đáng xem liệu có thực sự cần tất cả CA hay chỉ cần những CA có khả năng được dùng đến
Google không thể làm được nhiều nếu một nhà sản xuất giá rẻ nào đó quyết định không cập nhật cho khách hàng. Họ có thể yêu cầu phải cung cấp cập nhật trong một khoảng thời gian nhất định để được hoặc duy trì chứng nhận Android, nhưng đến một lúc nào đó nhà sản xuất đó cũng có thể bỏ luôn Android
Ngoài ra Qualcomm cũng không cung cấp kernel và blob được cập nhật cho các chipset cũ sau một thời gian. Google đã đàm phán để kéo dài thời gian này hơn con số 18 tháng đáng thất vọng trước đây, nhưng Qualcomm không có nghĩa vụ phải hợp tác hơn nữa. Khi Google bắt đầu tự làm chipset, họ cũng bớt quan tâm đến vấn đề này phần nào
Không phải là tốt đẹp gì, nhưng với mô hình của Android thì phần lớn khó tránh khỏi như vậy, còn mô hình của Apple cho phép họ kiểm soát mảng này tốt hơn
Cách họ giữ cho chứng chỉ ký chéo cũ tiếp tục hoạt động khá thú vị
Chứng chỉ ký chéo mới hơi khác thường ở chỗ nó kéo dài quá cả thời điểm DST Root CA X3 hết hạn. Đây là giải pháp khả thi vì Android cố ý không bắt buộc kiểm tra ngày hết hạn của chứng chỉ được dùng làm trust anchor
Trên thực tế, trust anchor hoạt động khá khác so với các chứng chỉ khác, điều này có thể khiến nhiều người ngạc nhiên
[1] https://letsencrypt.org/2020/12/21/extending-android-compati...
[2] https://alexsci.com/blog/name-non-constraint/
Nếu nhớ không nhầm thì một trong những vấn đề lớn là OpenSSL cũ vẫn kiểm tra việc root anchor đã hết hạn hay chưa. Và đó chưa phải tất cả; ở công ty lúc đó, Ubuntu phải vá gì đó để xử lý tình huống này, và bản vá chỉ được phát hành vài ngày trước khi hết hạn nên một số hệ thống đã bị gián đoạn ngắn. Chúng tôi phải rebuild hàng loạt image Docker để khắc phục sự cố
Tôi cho rằng người ta chỉ dùng cách lách này vì nó quá mạnh tay và chưa từng có tiền lệ, trong khi chi phí để xin ký chéo từ một root chưa hết hạn và tương thích rộng rãi thì chênh lệch là rất lớn. Chắc hẳn họ cũng phải kiểm thử rất nhiều. Nó không hoàn hảo, nhưng việc mọi thứ nhìn chung vẫn trôi qua khá êm là điều đáng ấn tượng
1 time_check = now()
2 for cert in Cn to C0
3 if time_check < cert.valid_from || time_check > cert.valid_to
4 return EXPIRED
5 time_check = cert.issue_time
6 return NOT_EXPIRED
Nhưng tìm kiếm rồi mới thấy thực tế nó hoạt động như phiên bản bỏ dòng 5, tức là mọi lần kiểm tra thời gian đều dựa trên thời điểm hiện tại. Tất cả chứng chỉ trong chuỗi đều phải còn hiệu lực ngay lúc này
Chứng chỉ ký mã thì lại hoạt động theo cách mà tôi từng tưởng TLS cũng làm vậy. Mã có đóng dấu thời gian vẫn hợp lệ nếu tại thời điểm được đóng dấu, chứng chỉ gốc còn hiệu lực, kể cả bây giờ chứng chỉ gốc đã hết hạn
Hy vọng việc chứng chỉ ký chéo hết hạn sẽ không gây ra vấn đề gì với đa số mọi người, nhưng lần DST cross-sign hết hạn trước đó thì không như vậy.
Nếu nhớ không nhầm thì GnuTLS đã không dựng được đường dẫn đúng cách sau khi hết hạn. Có vẻ nó chỉ tạo đường dẫn đi tới chứng chỉ đã hết hạn, báo là đã hết hạn rồi dừng lại, bỏ qua các đường dẫn khả dĩ khác.
Tệ hơn nữa là GnuTLS chính là thư viện TLS mà apt dùng khi sử dụng HTTPS. HTTPS không phải mặc định, nhưng nhóm bảo mật của chúng tôi muốn phân phối an toàn bằng cách vendor toàn bộ package, điều đó tự nó là hợp lý, nhưng cái giá phải trả là sự cố ngừng dịch vụ. Hình như việc này đã được sửa trong Bullseye, và hoàn toàn may mắn là chỉ khoảng một tuần trước khi chứng chỉ hết hạn. Azure cũng gặp nhiều sự cố liên quan đến lần hết hạn đó.
Ngoài việc dùng HTTP không mã hóa ra, có giải pháp nào được đề xuất để khiến TLS không còn là thành phần mong manh nhất của web nữa không?
Những thay đổi liên miên như loại bỏ giao thức, hết hạn chứng chỉ, thay thế chứng chỉ có vẻ đã đẩy planned obsolescence lên quá mức.
Phần tệ dẫn đến planned obsolescence là thiết bị quá nhanh chóng không còn nhận được bản cập nhật từ nhà sản xuất, và bên thứ ba cũng không thể cập nhật được.
Giải pháp tôi thích là luật buộc nhà sản xuất không được ngừng phát hành cập nhật bảo mật trước khi sản phẩm ngừng bán được 10 năm, hoặc nếu muốn/ngừng thì phải công khai toàn bộ dưới dạng mã nguồn mở, hoặc hoàn tiền đầy đủ cho toàn bộ người mua.
Lý do phải làm vậy là vì việc thu hồi phân tán ở quy mô toàn cầu là một bài toán cực kỳ khó đến mức phi lý. Để giảm nhẹ việc người dùng và chứng chỉ bị gắn với nhau theo cách gần như không thể thu hồi, người ta rút ngắn thời hạn chứng chỉ để thu nhỏ phạm vi thiệt hại.
Tất nhiên đây không phải an ủi lớn lao gì, nhưng thế giới chứng chỉ thời hạn ngắn sau ACME vẫn có trải nghiệm cho lập trình viên tốt hơn so với thế giới ác mộng của chứng chỉ Verisign dài hạn. Cũng đáng nhớ là bất kỳ giải pháp thay thế nào cho TLS cũng khó tránh khỏi các vấn đề tương tự.
Định dạng chứng chỉ x509 thực ra hầu như không thay đổi trong thời gian rất dài.
Thay đổi ở cấp giao thức có lẽ giờ đã ổn định lại. TLS 1.2 được đưa vào từ năm 2008 và đến giờ vẫn được xem là ổn, nên khó mà coi là mới nữa. Rất nhiều người đã soi xét kỹ, nên hy vọng phần lớn vấn đề đã được lộ ra.
Theo tôi thì những gì Let's Encrypt đang làm về cơ bản cũng có thể xem là DANE, vậy nên tôi tự hỏi sao không hỗ trợ luôn. Dĩ nhiên có thể có những trường hợp sử dụng mà DANE không phù hợp.
Có vẻ không nên để cái hoàn hảo cản trở cái đủ tốt, và ai muốn thì cứ để họ dùng DANE.
Câu “có thể giảm đáng kể chi phí vận hành để dồn nguồn lực cho quyền riêng tư và cải thiện bảo mật” có nghĩa là họ đang trả cỡ hàng triệu đô cho việc ký chéo sao?
Tổng chi phí cùng năm là 5,1 triệu USD, nên khoản chi này chiếm gần 10% ngân sách.
[0]: https://beta.candid.org/profile/9328188?keyword=46-3344200&a...
Có ai biết câu chuyện hậu trường về việc làm thế nào họ thuyết phục được công ty chứng chỉ ký chéo không? Let’s Encrypt chẳng phải đang giết chết hoàn toàn mô hình kinh doanh của họ sao?
Những công ty như RapidSSL hay GoDaddy có lẽ đã không ký chéo cho Let’s Encrypt trừ khi được đề nghị một khoản tiền ở mức “mua luôn toàn bộ mảng kinh doanh CA của chúng tôi đi”.
Nhưng bán chứng chỉ DV không phải mô hình kinh doanh của IdenTrust, nên như người khác đã suy đoán, họ có thể sẵn sàng cung cấp ký chéo với số tiền chưa tới 6 chữ số. Với cách hoạt động của chứng chỉ root TLS, việc ký chéo của IdenTrust cũng hữu ích với LE chẳng kém gì ký chéo từ các CA siêu lợi nhuận.
Có vẻ IdenTrust cũng đâu có phá sản.
1 IdenTrust 48.5% 53.6%
2 DigiCert Group 13.1% 14.5%
3 Sectigo (Comodo Cybersecurity) 12.1% 13.4%
4 GlobalSign 6.1% 6.7%
5 Let's Encrypt 5.8% 6.4%
6 GoDaddy Group 4.8% 5.3%
https://en.wikipedia.org/wiki/Certificate_authority
Vào cuối năm 2021, khi chứng chỉ trung gian ký chéo và chính DST Root CA X3 hết hạn, tất cả trình duyệt hiện đại đều đã tin cậy root của LE, nhưng hơn một phần ba thiết bị Android vẫn chạy hệ điều hành cũ nên đã có nguy cơ đột nhiên không còn tin cậy các website dùng chứng chỉ LE nữa
Chỉ vài tuần trước tôi mới biết, có vẻ người dùng ubiquiti cũng bị ảnh hưởng
Gần đây khi chuyển backend từ AWS về máy chủ cục bộ, tôi đã phải đổi từ Letsencrypt vốn vẫn dùng sang ZeroSSL
Vì các thiết bị IoT đời 2016 mà tôi còn phải hỗ trợ không có chứng chỉ root cần thiết để xác minh chứng chỉ LE. Có lẽ việc này liên quan đến việc chứng chỉ root R3 mà LE dùng đã hết hạn vào năm 2021
Việc chỉ một chứng chỉ hết hạn mà có thể khiến toàn bộ sản phẩm đã bán ra biến thành cục gạch thật sự khá sốc. Trong trường hợp này thì không thành vấn đề lớn vì vẫn có chứng chỉ root hợp lệ từ nhà cung cấp khác
Họ thậm chí còn tiếp tục phát hành sau cả thời hạn do CA/Browser Forum quy định. Tôi đã nghĩ khi đó mọi người đều nhận ra rằng việc dùng Web PKI trong khi không có cách đẩy cập nhật là điều không thể dung hòa, nhưng có vẻ không phải vậy
Ngay từ sau khi ký chéo được đưa vào sử dụng, các website nhắm tới desktop đã dần loại bỏ chứng chỉ ký chéo
Vì nó tạo ra những vấn đề tương thích trước đây chưa từng có, và một số bộ xác minh chứng chỉ bị vấp ở chứng chỉ root đã hết hạn. Những người dùng bị ảnh hưởng không rành kỹ thuật nên cuối cùng cũng không xác định được nguyên nhân gốc rễ