Máy tính, điện thoại của bạn có thể thành cục gạch từ 30/09/2021

 

DST Root CA X3 hết hạn vào ngày 30/09

  Một chứng chỉ kỹ thuật số được sử dụng rộng rãi để xác minh kết nối Internet an toàn sẽ hết hạn vào ngày 30/9 và hàng triệu thiết bị cũ sẽ không thể cập nhật để cài đặt chứng chỉ mới hơn. Chứng chỉ này có tên DST Root CA X3, do Let’s Encrypt phát hành



Máy Mac, Win XP,  iPhone cũ, máy chơi game PlayStation 3, Nintendo 3DS cùng hàng loạt TV thông minh, set-top box và các thiết bị thông minh khác, kể cả một số chiếc PlayStation 4 có thể bị mất kết nối Internet trong tuần tới.

 Dĩ nhiên còn vô vàn dịch vụ chạy trên nền tảng này cũng sẽ bị ảnh hưởng nếu NCC không kịp cập nhật, Cuối năm 2020, người ta ước tính 1/3 số điện thoại Android trên thị trường có thể bị biến thành "cục gạch" trong ngày 30/9.

Bạn cần làm gì?

May mắn cho người dùng các thiết bị Android cũ là một giải pháp đã được đưa ra để các thiết bị đó có thể hoạt động đến tháng 9/2024, miễn là máy chạy Android 2.3.6 Gingerbread trở lên. Sau năm 2024, thiết bị Android sẽ cần cập nhật phiên bản hệ điều hành thấp nhất là 7.1.1 Nougat.

Tuy nhiên, với máy Mac chạy macOS 10.12.0 trở xuống, iPhone và iPad chạy iOS 9 trở xuống hay PlayStation 4 chạy bản firmware thấp hơn 5.00 cũng như PC chạy Windows CP Service Pack 2 thì mọi chuyện không được may mắn như thế. Tất cả các thiết bị kể trên sẽ bị ảnh hưởng.

Nếu bạn sở hữu một trong các thiết bị kể trên và có thể nâng cấp hệ điều hành, hãy làm ngay điều đó trong tuần này. Chẳng hạn, bất cứ PC nào chạy Window XP SP2 đều có thể nâng cấp lên XP SP3. Máy Mac cần nâng cấp lên phiên bản 10.13 High Sierra và bất cứ chiếc iPhone 5 hoặc mới hơn cần cài đặt iOS 10. PS4 hiện đã ở phiên bản firmware 9.00, vừa ra mắt cách đây ít ngày.

Máy chơi game PlayStation 3 có thể được nâng cấp hoặc không. Sony đã phát hành bản firmware PS3 4.88 vào tháng 6/2021 - gần 15 năm sau khi bản firmware đầu tiên được phát hành. Hiện chưa rõ bản cập nhật đó có gì. Sony chỉ nói rằng họ đã mang đến các "tính năng bổ sung, cải thiện khả năng sử dụng và bảo mật nâng capo", nhưng có thể nó sẽ khắc phục sự cố này.

Nếu không thể nâng cấp máy Mac, PC hoặc iPhone, bạn có thể cài đặt trình duyệt Firefox để duy trì truy cập Internet trong khi một số ứng dụng độc lập khác có thể không hoạt động. Firefox không phụ thuộc vào hệ điều hành của thiết bị để có các chứng chỉ bảo mật – nó sử dụng chứng chỉ bảo mật riêng.

Đối với TV thông minh, tủ lạnh thông minh, bộ định tuyến Wi-Fi gia đình… thật khó để nói. Khả năng cao là nhiều thiết bị phát hành trước năm 2017 có thể bị ảnh hưởng, đặc biệt là những thiết bị chưa từng nhận bất cứ bản cập nhật nào. Vì vậy nếu có thể, bạn hãy mở hoặc tải xuống hướng dẫn sử dụng của thiết bị và cố gắng nâng cấp firmware hoặc hệ điều hành.

Chuyện gì sẽ xảy ra?

Vẫn chưa hoàn toàn hết cơ hội đối với các thiết bị không thể nâng cấp. Hầu hết trong số chúng sẽ hỗ trợ ít nhất vài chục chứng chỉ gốc khác. Vì vậy, nhiều thiết bị cũ vẫn có thể kết nối với ít nhất một số trang web.

Do đó, sẽ rất khó để nói chính xác thiết bị nào sẽ bị ảnh hưởng ra sao vào ngày 30/9.

Từ thông báo DST Root CA X3 Hết hạn (tháng 9 năm 2021) , tôi đã theo liên kết của nó và đọc qua một số chủ đề, được liệt kê trong phần Tham khảo ở cuối. Tôi sẽ không lặp lại chúng nhưng cố gắng tóm tắt một chút.

Ví dụ: sử dụng docker để khởi chạy ubuntu 14.04 / 16.04 / 18.04

$ docker run -it ubuntu:16.04 bash

root@797fc9ce1a95:/# apt update
root@797fc9ce1a95:/# apt install openssl curl ca-certificates

DST Root CA X3 sắp hết hạn

root@797fc9ce1a95:/etc/ssl/certs# openssl x509 -in DST_Root_CA_X3.pem -noout -text
Issuer: O=Digital Signature Trust Co., CN=DST Root CA X3
  Validity
      Not Before: Sep 30 21:12:19 2000 GMT
      Not After : Sep 30 14:01:15 2021 GMT

root@797fc9ce1a95:/etc/ssl/certs# openssl x509 -in ISRG_Root_X1.pem -noout -text
   Issuer: C=US, O=Internet Security Research Group, CN=ISRG Root X1
   Validity
      Not Before: Jun  4 11:04:38 2015 GMT
      Not After : Jun  4 11:04:38 2035 GMT

# 14.04
$ openssl version
OpenSSL 1.0.1f 6 Jan 2014
# 16.04
$ openssl version
OpenSSL 1.0.2g  1 Mar 2016
# 18.04
$ openssl version
OpenSSL 1.1.1  11 Sep 2018

Tôi sẽ gọi chúng là “chuỗi mặc định cũ”, “chuỗi thay thế cũ”, “chuỗi mặc định mới” và “chuỗi thay thế mới”. Xin lưu ý rằng “chuỗi thay thế cũ” giống với “chuỗi thay thế mới”.

Trích dẫn từ Thay đổi chuỗi sản xuất

Through May 3, 2021
Default chain: End-entity certificate ← R3 ← DST Root CA X3
Alternate chain: End-entity certificate ← R3 ← ISRG Root X1
Starting May 4, 2021
Default chain: End-entity certificate ← R3 ← ISRG Root X1 ← DST Root CA X3

Alternate chain: End-entity certificate ← R3 ← ISRG Root X1
This is a shorter chain, available to people through the API who do not need the Android compatibility of the longer chain. You can choose this chain with many ACME clients, please see your chosen ACME client documentation for more information.

Ví dụ: để hiểu cách dịch vụ này được khách hàng tin cậy,
https://helloworld.letsencrypt.org/

# give the site name twice
openssl s_client -servername helloworld.letsencrypt.org -showcerts -connect helloworld.letsencrypt.org:443

Certificate chain
 0 s:/CN=helloworld.letsencrypt.org
   i:/C=US/O=Let's Encrypt/CN=R3
1 s:/C=US/O=Let's Encrypt/CN=R3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3

Một số dịch vụ khác nhau

https://helloworld.letsencrypt.org/  <-- as of 5/17/2021, this certificate is of the old default chain.
https://acme-v02.api.letsencrypt.org/directory <-- this is load balanced by the new default chain and old default chain.
https://valid-isrgrootx1.letsencrypt.org/  <-- this is the new alt chain

Mục đích là để tìm hiểu xem liệu giao tiếp máy khách / máy chủ có bị hỏng do chứng chỉ DST X3 hết hạn sau ngày 30/9/2021 hay không.

Chúng ta có thể du hành thời gian (bằng cách điều chỉnh thời gian hệ thống) để thực hiện bài kiểm tra ngay bây giờ không? Hóa ra chúng tôi vẫn không thể vì chứng chỉ Let'sEncrypt có giá trị trong 90 ngày. Hôm nay là 17/5/2021 (tính đến thời điểm viết bài) nên chứng chỉ mới nhất của họ chỉ có giá trị đến tháng 8. Vào tháng 7 năm 2021, chúng tôi sẽ có chứng chỉ có giá trị đến tháng 10, khi chúng tôi có thể du hành thời gian để kiểm tra.

Điều này chỉ áp dụng nếu phía dịch vụ web quyết định không thực hiện hành động nào, ví dụ: sử dụng “chuỗi mặc định mới”, là “Chứng chỉ thực thể cuối ← R3 ← ISRG Root X1 ← DST Root CA X3”, vì DST Root CA X3 là CA hết hạn có thể gây ra sự cố cho một số máy khách.

Nếu dịch vụ web đã sử dụng “chuỗi thay thế cũ”, ví dụ: “Chứng chỉ tổ chức cuối ← R3 ← ISRG Root X1” hoặc quyết định chuyển sang “chuỗi thay thế mới” (điều tương tự), thì có thể thực hiện kiểm tra NGAY BÂY GIỜ với chứng chỉ Let'sEncrypt được yêu cầu thông qua “chuỗi thay thế”, như được mô tả sau.

Giả vờ kiểm tra "chuỗi mặc định mới"

Hiện tại, chúng tôi không thể kiểm tra “chuỗi mặc định mới” bằng chứng chỉ thực. Nhưng chúng tôi có thể mô phỏng tình huống bằng cách sử dụng “chứng chỉ dàn dựng Let'sEncrypt”, chứng chỉ này sẽ quen thuộc với tất cả những ai đã sử dụng Let'sEncrypt.

Trong chủ đề diễn đàn, chuỗi trợ giúp cho DST Root CA X3 hết hạn (tháng 9 năm 2021) , bài đăng # 28, người dùng Nummer378 đã chia sẻ một liên kết có mô phỏng “chuỗi mặc định mới” với chứng chỉ dàn.

https://expired-root-ca-test.germancoding.com/

Liên kết này có "chứng chỉ dàn" nên trình duyệt hoặc trình duyệt thông thường sẽ hiển thị lỗi chứng chỉ.

Sử dụng lệnh này để tìm ra chuỗi tin cậy của nó.

openssl s_client -servername expired-root-ca-test.germancoding.com -showcerts -connect expired-root-ca-test.germancoding.com:443

Certificate chain
 0 s:/CN=expired-root-ca-test.germancoding.com
   i:/C=US/O=(STAGING) Let's Encrypt/CN=(STAGING) Artificial Apricot R3
1 s:/C=US/O=(STAGING) Let's Encrypt/CN=(STAGING) Artificial Apricot R3
   i:/C=US/O=(STAGING) Internet Security Research Group/CN=(STAGING) Pretend Pear X1
2 s:/C=US/O=(STAGING) Internet Security Research Group/CN=(STAGING) Pretend Pear X1
   i:/C=US/O=(STAGING) Internet Security Research Group/CN=(STAGING) Doctored Durian Root CA X3

Thông tin CA giả mạo có thể được truy xuất từ ​​2 chứng chỉ gốc giả:

https://letsencrypt.org/certs/staging/letsencrypt-stg-root-x1.pem (Đây là chứng chỉ “ISRG Root X1” được mô phỏng)

https://letsencrypt.org/certs/staging/letsencrypt-stg-root-dst.pem (Đây là "DST Root CA X3" mô phỏng đã hết hạn)

#fake ISRG X1
  Issuer: C=US, O=(STAGING) Internet Security Research Group, CN=(STAGING) Pretend Pear X1
  Validity
      Not Before: Jun  4 11:04:38 2015 GMT
      Not After : Jun  4 11:04:38 2035 GMT
# fake DST X3
  Issuer: C=US, O=(STAGING) Internet Security Research Group, CN=(STAGING) Doctored Durian Root CA X3
  Validity
      Not Before: Sep 30 21:12:19 2000 GMT
      Not After : Jan 30 14:01:15 2021 GMT

Để thực hiện thử nghiệm, CHỈ sử dụng môi trường thử nghiệm.

Thêm 2 "chứng chỉ gốc giả" này vào cửa hàng tin cậy. Tôi đã làm điều này trong Ubuntu và đối với các môi trường khác, nó có thể khác. Các bước ví dụ như sau:

$ cd /usr/local/share/ca-certificates/
$ sudo mkdir letsencrypt
$ cd letsencrypt/
$ sudo wget --no-check-certificate https://letsencrypt.org/certs/staging/letsencrypt-stg-root-x1.pem
$ sudo wget --no-check-certificate https://letsencrypt.org/certs/staging/letsencrypt-stg-root-dst.pem
$ sudo mv letsencrypt-stg-root-x1.pem letsencrypt-stg-root-x1.crt
$ sudo mv letsencrypt-stg-root-dst.pem letsencrypt-stg-root-dst.crt
$ sudo update-ca-certificates

$ sudo update-ca-certificates 
Updating certificates in /etc/ssl/certs...
2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

curl -v https://expired-root-ca-test.germancoding.com/

Kết quả đúng như mong đợi, như các Thay đổi về Khả năng Tương thích Máy khách OpenSSL cho Chứng chỉ Let's Encrypt đã cho chúng tôi biết.

Ubuntu 14.04 Không thành công OpenSSL 1.0.1f
Ubuntu 16.04 Không thành công Openssl 1.0.2g
Ubuntu 18.04 Pass Openssl 1.1.1

kết quả kiểm tra chuỗi mặc định mới

Vì vậy, chúng tôi có thể mong đợi sau ngày 30/9/2021, một ứng dụng khách từ Ubuntu 14.04 / 16.04 sử dụng lib OpenSSL gốc của nó không thể kết nối với dịch vụ có chứng chỉ "chuỗi mặc định" của Let'sEncrypt.

Tôi đọc rằng có thể biên dịch / cài đặt OpenSSL 1.1.x cho Ubuntu 16.04, nhưng không chắc cho 14.04. Tôi đã không kiểm tra để tìm ra khả năng tương thích đầy đủ của hệ thống với bản nâng cấp thủ công này. Tôi cũng đọc rằng có thể xây dựng cho phép cờ tính năng cho openssl 1.0.2 để có cùng hành vi của 1.1.x.

Kiểm tra với chứng chỉ "chuỗi thay thế mới"

"Chuỗi thay thế mới" đã có sẵn, giống như "chuỗi thay thế cũ". Ví dụ, liên kết này:

https://valid-isrgrootx1.letsencrypt.org/

Nếu bạn cần hỗ trợ các phiên bản OpenSSL bị ảnh hưởng và không cần khả năng tương thích với các thiết bị chạy phiên bản Android cũ hơn 7.1.1, bạn sẽ có thể định cấu hình ứng dụng khách ACME của mình để sử dụng chuỗi ngắn hoạt động cho OpenSSL.
từ Các thay đổi về khả năng tương thích với ứng dụng khách OpenSSL đối với chứng chỉ Let's Encrypt

Và, như mong đợi, không thể truy cập trang web sử dụng chứng chỉ “chuỗi thay thế mới” từ thiết bị Android <7.1.1, như tôi đã kiểm tra theo liên kết ở trên.

Để bổ sung bảng tương thích, tôi đã thêm thông tin về “chuỗi thay thế mới”.

Nó có thể tốt hơn không?

Kinh nghiệm từ việc hết hạn chứng chỉ gốc Sectigo năm ngoái, như được mô tả trong bài viết này - https://www.agwa.name/blog/post/fixing_the_addtrust_root_expiration, cho thấy có 2 phương pháp để khắc phục sự cố chứng chỉ gốc hết hạn: từ phía máy chủ và phía máy khách. Từ phía máy chủ, nó phải xóa chứng chỉ đã hết hạn khỏi chuỗi của nó, ví dụ như trong trường hợp Let'sEncrypt này, để sử dụng "chuỗi thay thế mới". Phương pháp khác là từ phía máy khách để xóa chứng chỉ gốc đã hết hạn khỏi kho lưu trữ tin cậy của nó.

Điều này chỉ có thể thực hiện được khi có thể điều chỉnh phía máy khách. Nếu không thể sửa đổi phần mềm máy khách thì đây không phải là tùy chọn.

Việc xóa chứng chỉ đã hết hạn từ phía máy khách hoạt động vì bản chất của lỗi OpenSSL 1.0.x chỉ xảy ra khi chứng chỉ đã hết hạn tồn tại. Đối với “chuỗi mặc định mới”, ví dụ: “Chứng chỉ thực thể cuối ← R3 ← ISRG Root X1 ← DST Root CA X3 (khi hết hạn)”, OpenSSL 1.0.x sẽ không kết nối được khi phát hiện chứng chỉ hết hạn, trong khi 1.1. x dừng phát hiện khi nó đã tìm thấy CA “ISRG Root X1” hợp lệ. Tuy nhiên, nếu chứng chỉ X3 hết hạn bị xóa khỏi cửa hàng tin cậy, kết nối sẽ hoạt động.

Để xác minh, hãy thực hiện một thử nghiệm khác tương tự như trên, ví dụ: sử dụng trang web thử nghiệm:

curl -v https://expired-root-ca-test.germancoding.com/

$ cd /usr/local/share/ca-certificates/
$ sudo mkdir letsencrypt
$ cd letsencrypt/
$ sudo wget --no-check-certificate https://letsencrypt.org/certs/staging/letsencrypt-stg-root-x1.pem
$ sudo mv letsencrypt-stg-root-x1.pem letsencrypt-stg-root-x1.crt
$ sudo update-ca-certificates

Ubuntu 14.04 Pass Openssl 1.0.1f
Ubuntu 16.04 Pass Openssl 1.0.2g
Ubuntu 18.04 Pass Openssl 1.1.1

Điều này chứng tỏ rằng khi chúng tôi xóa chứng chỉ gốc đã hết hạn, cả 3 phiên bản Ubuntu sẽ hoạt động với “chuỗi mặc định mới giả vờ”.

Một thử nghiệm khác có thể được thực hiện đối với "chuỗi mặc định mới" thực tế. "Chuỗi mặc định mới" đã có hiệu lực sau ngày 4/5/2021. Một trang web có chứng chỉ như vậy có thể được tạo hoặc sử dụng liên kết chính thức này:

https://acme-v02.api.letsencrypt.org/directory <-- this is load balanced by the new default chain and old default chain.

Đặt lại bộ chứa docker cho Ubuntu một lần nữa và bắt đầu những cái mới, sau đó xóa chứng chỉ “DST Root CA X3” hết hạn khỏi cửa hàng tin cậy.

# comment out the DST X3 cert
$ sudo sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf
$ sudo update-ca-certificates

# Hit the "old default chain"
$ curl https://acme-v02.api.letsencrypt.org/directory
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
# Hit the "new default chain"
$ curl https://acme-v02.api.letsencrypt.org/directory
{
  "HPMQaoDeou0": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417",
  "keyChange": "https://acme-v02.api.letsencrypt.org/acme/key-change",
  "meta": {
    "caaIdentities": [
      "letsencrypt.org"
    ],
    "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf",
    "website": "https://letsencrypt.org"
  },
  "newAccount": "https://acme-v02.api.letsencrypt.org/acme/new-acct",
  "newNonce": "https://acme-v02.api.letsencrypt.org/acme/new-nonce",
  "newOrder": "https://acme-v02.api.letsencrypt.org/acme/new-order",
  "revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert"

Yêu cầu thành công xác nhận rằng “chuỗi mặc định mới”, ví dụ: “Chứng chỉ thực thể cuối ← R3 ← ISRG Root X1 ← DST Root CA X3” hoạt động tốt ngay cả sau khi xóa chứng chỉ “DST X3” từ phía máy khách.

Kiểm tra xác nhận nếu phía máy khách có thể được điều chỉnh để xóa chứng chỉ gốc DST X3 đã hết hạn, nó sẽ hoạt động với chứng chỉ "chuỗi mặc định mới", như được hiển thị trong bảng bên dưới.

Phương pháp này hơi phức tạp về “thời điểm” xóa chứng chỉ DST X3, vì thông thường quá trình lan truyền phần mềm phía máy khách mất khá nhiều thời gian.

Phương pháp yêu cầu chứng chỉ "chuỗi thay thế mới"

Tôi vẫn đang tìm một phương pháp phù hợp để yêu cầu chứng chỉ "chuỗi thay thế mới". Một số gợi ý được cung cấp ở đây mà các ứng dụng khách acme uacme , Caddy và Certbot đã hỗ trợ. Tôi cũng thấy rằng lego có sự hỗ trợ. Từ cấp độ cao hơn, Traefik 2.x có hỗ trợ, nhưng tôi chưa thử. cert-manager hỗ trợ " chuỗi thay thế " và tôi đã thử nghiệm nó OK.

Cảm ơn vì đã đọc.

Không có nhận xét nào: