Trình cài đặt Windows của ImageMagick sẽ không còn được ký nữa
(github.com/ImageMagick)- ImageMagick thông báo rằng chứng chỉ ký mã hiện tại sẽ hết hạn vào ngày 28/10/2023, và họ không còn có thể nhận chứng chỉ do LeaderSSL tài trợ như trước
- Từ tháng 6/2023, CA/B Forum yêu cầu khóa riêng tư ký mã OV phải được lưu trữ trong thiết bị được chứng nhận FIPS 140-2 Level 2 hoặc Common Criteria Level EAL4+, khiến cách xuất khóa riêng tư để dùng trong GitHub Actions không còn khả thi
- Phạm vi ảnh hưởng không chỉ giới hạn ở trình cài đặt
.exe, mà áp dụng cho tất cả binary từng được ký bằng chứng chỉ ký mã - Trong phần thảo luận, các phương án thay thế được nhắc đến gồm chứng chỉ 629 USD/năm của Digicert, SignPath, Azure Key Vault với AzureSignTool, Azure Code Signing và tự ký; một số có ràng buộc như tích hợp GitHub Actions hoặc yêu cầu AppVeyor
- Ngày 06/11/2023, ImageMagick quyết định sử dụng Azure Code Signing, nhờ đó có thể ký lại các binary
Vấn đề chứng chỉ hết hạn và dừng ký
- Người bảo trì ImageMagick thông báo rằng chứng chỉ ký mã đang sử dụng sẽ hết hạn vào ngày 28/10/2023
- Trong nhiều năm, LeaderSSL đã tài trợ chứng chỉ ký mã, nhưng nay không thể tiếp tục tài trợ nữa
- Từ tháng 6/2023, yêu cầu của CA/B Forum đã thay đổi: khóa riêng tư ký mã OV phải được lưu trữ ở một trong các loại sau
- Thiết bị được chứng nhận FIPS 140-2 Level 2
- Thiết bị được chứng nhận Common Criteria Level EAL4+
- Vì yêu cầu này, ImageMagick không thể tiếp tục dùng cách cũ là xuất chứng chỉ ký mã và khóa riêng tư để sử dụng trong GitHub Actions
Phương án thay thế cần thiết và chi phí
- Người bảo trì đưa ra hai lựa chọn cho cách làm mới
- Dùng GitHub agent tự vận hành cùng token phần cứng
- Dùng giải pháp ký dựa trên đám mây tích hợp với GitHub
- Cách được ưu tiên là giải pháp đám mây tích hợp với GitHub
- Khi đó, người bảo trì cho biết Digicert dường như là lựa chọn duy nhất, và chứng chỉ ký mã của Digicert có giá 629 USD cho một năm, chưa bao gồm thuế
- Họ đề nghị các tổ chức cần trình cài đặt đã ký hãy tài trợ chứng chỉ ký mã
Phạm vi ảnh hưởng
- Một người tham gia hỏi liệu ảnh hưởng chỉ áp dụng cho trình cài đặt
.exe, hay tất cả binary Win32 nhưmagick.exetrong portable zip cũng sẽ không được ký - Người bảo trì trả lời rằng tất cả binary từng được ký bằng chứng chỉ ký mã đều bị ảnh hưởng
Các phương án đã được thảo luận
-
SignPath
- Một người tham gia đề xuất SignPath, và người bảo trì trả lời rằng tuy chưa biết công ty này nhưng đây có thể là một lựa chọn
- Một người tham gia khác chia sẻ rằng họ đã dùng SignPath cho dự án OSS hơn 2 năm và luôn nhận được phản hồi tốt cho các câu hỏi
- Người này nói thêm rằng theo hiểu biết của họ, do cách SignPath xác minh nguồn gốc, việc build binary hoặc trình cài đặt đã ký cần AppVeyor, và trình cài đặt phải ở định dạng
.MSI - Một người tham gia phía SignPath giải thích rằng chứng chỉ miễn phí có một số hạn chế
- Chứng chỉ miễn phí cấp cho “SignPath Foundation” yêu cầu bản build minh bạch và có thể xác minh; vào thời điểm đó nghĩa là AppVeyor
- Connector cho GitHub Actions sẽ sớm được cung cấp
- Các định dạng chuẩn như MSI, MSIX, AppX có lợi thế, nhưng các trình cài đặt khác cũng có thể được xử lý
- Vì ImageMagick có LLC đã đăng ký, họ có thể nhận chứng chỉ mang tên ImageMagick mà không bị hạn chế, và SignPath có thể tài trợ năm đầu tiên
-
Azure Key Vault và AzureSignTool
- Một người tham gia chia sẻ rằng họ đưa chứng chỉ ký mã EV do GlobalSign cấp vào Azure Key Vault và dùng AzureSignTool để ký file trong GitHub Actions
- Người bảo trì trả lời rằng cách này có vẻ là lựa chọn rẻ hơn, và cho biết hôm trước họ cũng được giới thiệu dotnet/sign, vốn dùng
AzureSignTool - Một người tham gia khác chia sẻ bài viết về việc ký trình cài đặt Windows bằng chứng chỉ EV với kết hợp GlobalSign và Azure Key Vault
- Một người tham gia nói rằng Azure Key Vault hỗ trợ việc này, và ngay cả khi ký nhiều bản build mỗi ngày thì chi phí cũng chỉ tính bằng vài cent
- Sau đó, một người tham gia khác nói thêm rằng sau khi chứng chỉ hết hạn vào tháng 1/2024, họ gặp cùng vấn đề: chứng chỉ mới phải được phát hành trên thiết bị và không thể chuyển sang Azure Key Vault
-
Azure Code Signing
- Một người tham gia nói rằng họ đã chuyển sang Azure Code Signing và sẽ thử liên hệ với Microsoft cùng nhóm phụ trách dịch vụ này
- Người bảo trì trả lời rằng họ đã trực tiếp gửi email tới AzureCodeSigningTAP
- Một người tham gia tự giới thiệu là kỹ sư Azure Code Signing nói rằng dịch vụ hỗ trợ GitHub Actions, và hướng dẫn liên hệ nếu cần
-
Tự ký
- Một người tham gia hỏi liệu họ đã cân nhắc cách tự ký binary rồi yêu cầu người dùng cài đặt chứng chỉ công khai hay chưa
- Người bảo trì trả lời rằng họ chưa cân nhắc và đang xem xét các lựa chọn được đề xuất trong thảo luận
Quyết định cuối cùng
- Ngày 06/11/2023, người bảo trì cảm ơn các lựa chọn đã được đề xuất và cho biết họ quyết định sử dụng Azure Code Signing
- Với quyết định này, ImageMagick có thể ký lại các binary
- Quá trình thiết lập được ghi lại trong bài viết ở một kho lưu trữ riêng: ImageMagick now uses Azure Code Signing
1 bình luận
Ý kiến trên Hacker News
Tôi đã làm miễn phí một trình phát video mã nguồn mở dành cho huấn luyện viên e-sports, và liên tục nhận phàn nàn rằng người dùng phải vượt qua cảnh báo khi cài đặt lần đầu, nên tôi hiểu nỗi khổ này
Tôi có thể trả tiền chứng chỉ, nhưng không muốn bỏ thêm tiền cho một dự án mà mình đã dành thời gian làm ra và phát hành miễn phí
Sẽ thật tốt nếu có một dịch vụ kiểu Let's Encrypt cho phần mềm mã nguồn mở, nhưng từ góc nhìn của Microsoft hay Apple, điều đó có thể khiến người dùng thoát khỏi khu vườn có tường rào là app store, nên có lẽ đi ngược với lợi ích cốt lõi của họ
Tôi đã làm phần mềm gần 25 năm, và khá chua chát khi thấy quyền sở hữu đối với máy tính của chính mình ngày càng bị thu hẹp dưới danh nghĩa “bảo mật”
https://www.vodon.gg/
Câu trả lời thường là chứng chỉ ký mã nhằm mục tiêu chứng minh danh tính pháp lý, để có thể xử phạt ngoại tuyến người phát tán mã độc, hoặc cho phép chính sách chỉ cài phần mềm từ một danh sách nhà phát hành nhất định
Trong khi đó, chứng chỉ xác thực tên miền cho HTTPS nhằm chứng minh quyền kiểm soát đối với một tên DNS; điều này có thể được xác minh bằng các phương tiện kỹ thuật tự động và không nhất thiết gắn với danh tính ngoài đời
Chứng chỉ Let's Encrypt xác nhận rằng một khóa có vẻ đang được người kiểm soát một tên DNS nhất định kiểm soát, còn chứng chỉ ký mã muốn xác nhận đến mức khóa đó có vẻ do đại diện của một pháp nhân cụ thể tồn tại trong một khu vực tài phán cụ thể kiểm soát, nên chi phí xác minh một cách hữu ích cao hơn nhiều
Một ngày nào đó chính phủ có thể cung cấp cách tự động hóa việc này, nhưng đối tượng mà hai loại chứng chỉ chứng minh và phương thức xác minh của chúng khác nhau đáng kể
Thảo luận liên quan đã được nói dài hơn tại https://news.ycombinator.com/item?id=38056024
Nếu người dùng thật sự quan tâm đến mức đó thì họ nên sẵn sàng cùng gánh chi phí, còn nếu không thì trạng thái chưa ký cũng không nên là vấn đề
Có vẻ khi số lượt tải xuống tích lũy đủ nhiều thì cảnh báo này sẽ tắt
Dùng Mac thì bớt phải lo những chuyện này
Vấn đề không chỉ là chi phí
Tôi đã quản lý việc ký bằng workflow phát hành tự động
https://github.com/technion/rustypwneddownloader/blob/main/....
Theo quy định mới thì không thể dùng workflow này nữa, và thật khó bị thuyết phục rằng chuyển build sang máy desktop của tôi, dùng khóa ký phần cứng rồi upload theo cách không tự động cũng không minh bạch lại là một cải thiện về bảo mật
Thứ nhất, khóa riêng lưu dưới dạng file có thể bị đánh cắp âm thầm, và khi đó cách còn lại chỉ là thu hồi
Đây là lý do chính của yêu cầu HSM; những người viết mã độc đã làm chuyện này một thời gian, và việc thu hồi thì khó cũng như tốn kém vì nhiều lý do
HSM cũng có thể bị trộm, nhưng kẻ trộm phải đột nhập vào văn phòng hoặc nhà bạn để mang đồ đi, nên khả năng bạn nhận ra là cao hơn
Thông tin xác thực dùng HSM cũng có thể bị đánh cắp, nhưng có thể thay đổi dễ và nhanh; nếu biết PIN bị keylog, sau khi khôi phục khỏi sự cố xâm nhập bạn chỉ cần đổi PIN, không cần thu hồi chứng chỉ
Thứ hai, ký tự động trong CI thực ra có thể nguy hiểm
Bất kỳ ai có thể push code vào hệ thống CI đều có thể lấy chữ ký mã dưới tên bạn, và bạn có thể không hay biết
Vì khóa luôn online nên nếu hệ thống CI bị hack thì coi như xong; kể cả không bị hack, CI vẫn chạy rất nhiều mã tùy ý mà không được giám sát chặt, nên bất kỳ ai có thể đưa code vào đều trở thành điểm yếu
Ký cục bộ cho phép bạn giữ khóa đúng nghĩa là offline cho tới thời điểm phát hành, đồng thời áp dụng xác thực hai yếu tố với yếu tố sở hữu là khóa và yếu tố kiến thức là thông tin xác thực, nên khá an toàn
Các bản build phát triển hằng đêm, công cụ nội bộ, hay những binary tạm thời không được đưa ra ngoài thì cứ tự ký miễn phí là được
Tôi lưu chứng chỉ OV .pfx trong secret của GitHub Actions và dùng theo cùng cách
Chứng chỉ của tôi hết hạn vào tháng 11/2024, và tôi vẫn chưa quyết định sẽ làm gì
Chỉ riêng việc nhận chứng chỉ với tư cách lập trình viên cá nhân, không phải công ty, đã đủ khó rồi
Dù vậy, rốt cuộc đây nên là vấn đề tiền bạc
Nếu dùng HSM lưu trữ trên cloud giá 629 USD/năm như trong bài gốc thì có thể làm được, và nếu trả khoản đó thì có thể khiến nó chạy trong GitHub Actions bằng các lệnh hiện dùng như signtool hoặc Set-AuthenticodeSignature: https://docs.digicert.com/en/software-trust-manager/ci-cd-in...
Chỉ cần gắn khóa phần cứng vào một PC SFF/Atom nhỏ khoảng 100 USD
Thứ thay đổi chỉ là bước ký chuyển từ cloud sang runner cục bộ
Về mặt bảo mật, tôi không rõ nên nhìn theo hướng đó là cải thiện hay không
Thật đáng ngạc nhiên khi một dự án quan trọng và được dùng rộng rãi như ImageMagick lại không thể xoay nổi dù chỉ $629 cho một yếu tố thiết yếu như ký phần mềm
Đây là ví dụ rõ ràng cho thấy ngành công nghệ không hỗ trợ tài chính đúng mức cho các dự án mã nguồn mở mà chính họ phụ thuộc rất nhiều
Dù mang lại giá trị khổng lồ, các dự án như vậy thường không thu hồi đủ giá trị để có thể bền vững
Nó là một lời nhắc nhở lạnh lùng rằng cần có thay đổi lớn trong cách chúng ta đối xử và đánh giá đóng góp cho mã nguồn mở
Trọng tâm là liệu đây có phải vấn đề bảo mật, hay là vấn đề thúc đẩy một thị trường chỉ ai trả tiền mới được tham gia dưới khẩu hiệu “bảo mật”
Tôi thấy đáng lẽ phải ngược lại mới đúng
$629 không phải là số tiền nhỏ
Đây là chuyện Microsoft tự tạo ra cho hệ sinh thái Windows
Không phải là trả tiền thuê cho Microsoft hay các đối tác của họ
Trình soạn thảo văn bản desktop KeenWrite của tôi dùng Wine, rcedit-x64.exe, osslsigncode và shell script để ký các binary Windows
Trước tiên rcedit-x64.exe gắn thông tin nhận dạng vào binary
https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/installe...
Sau đó osslsigncode áp dụng chứng chỉ
https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/scripts/...
Như đã nói ở trên, việc một dự án mã nguồn mở có doanh thu 0 USD phải trả tiền để phân phối trên Windows đồng nghĩa với việc quyền sở hữu của tôi đối với máy tính của mình bị giảm đi
Bây giờ phải là dựa trên HSM
Tôi đã trải qua địa ngục với việc ký ứng dụng trên cả Windows lẫn macOS, và mọi thứ ngày càng tệ hơn
Trước hết, chuyện này khiến người ta muốn cung cấp mọi thứ dưới dạng ứng dụng web
Trình duyệt đem lại trải nghiệm tốt hơn nhiều ở nhiều khía cạnh, và bảo mật cũng được tích hợp tốt; trong khi đó các hệ điều hành 25 năm tuổi lại cho cảm giác như bảo mật được vá thêm vào sau
Có lẽ trong nội bộ Apple chẳng ai quan tâm, nhưng nếu đây trở thành vết nứt làm sụp đổ thế độc quyền phần cứng/phần mềm thì cũng khá buồn cười
Thứ hai, tôi tự hỏi vì sao bên thứ ba không thể cung cấp việc ký này như một dịch vụ
Về mặt kỹ thuật, chẳng phải không có giới hạn về số ứng dụng tôi có thể ký sao?
Từ góc nhìn người dùng, tôi cũng không hiểu vì sao lại là vấn đề nếu chứng chỉ không ký bằng tên tôi mà bằng tên ABC Corp được hệ điều hành tin cậy
Có thể thu hồi ở đâu đó trong chuỗi, nhưng về mặt kỹ thuật có vẻ khả thi, và tôi cũng tò mò liệu điều này có bị cấm rõ ràng trong đoạn nào đó của EULA mà tôi đã lơ đãng bấm đồng ý hay không
Dù vậy tôi thực sự hài lòng với kết quả, và có vẻ người dùng cũng vậy
Thú vị là gần đây có người khuyên tôi dùng thử nó, và họ khá ngạc nhiên khi biết tôi là tác giả chính
Trong kịch bản này, có phải họ nhắm mắt ký bừa mọi thứ không? Nếu vậy thì rõ ràng là không tốt
Phương án thay thế là quy trình xem xét và kiểm toán dài dòng, nhưng nếu thứ gì đó lọt qua thì người ký vẫn bị ảnh hưởng
Nếu không phải driver thiết bị, chúng ta đang tiến gần tới điểm có thể biên dịch lại để chạy trên trình duyệt phía client
Công ty tôi gần đây cũng gặp vấn đề tương tự, và chỉ khi không thể gia hạn chứng chỉ với nhà cung cấp cũ thì mới biết yêu cầu đã thay đổi
Hiện nay thông tin về cách ký mã Windows ít đến mức đáng ngạc nhiên
Chúng tôi không muốn dùng thiết bị vật lý, và điều đó cũng không thực tế với một đội ngũ hoàn toàn làm việc từ xa
Cuối cùng chúng tôi quyết định dùng Azure KeyVault cùng với Digicert
Tôi không thích Comodo, tức Sectigo
Có rất ít thông tin về cách làm cho tổ hợp này thực sự hoạt động, và phải chi khoảng $600 trước cả khi có thể thử xem nó có chạy không
Sau khi cấu hình xong thì nó hoạt động tốt
Thiết lập mới ký thông qua Azure an toàn hơn việc lưu khóa riêng trong hệ thống CI
Nhưng tôi chưa từng nghĩ ký ứng dụng Windows lại khó hơn ký trên macOS hay iOS
Nhiệm vụ hoàn thành
Như bạn nói, thông tin còn thiếu nên tôi nghĩ nó sẽ hữu ích cho nhiều người, gồm cả tôi
Tôi tò mò không biết có ai đã dùng SignPath(https://signpath.org) được nhắc tới trong một câu trả lời hay chưa
Trên website có ghi “SignPath Foundation provides reliable code signing for Open Source projects.”
Nếu là dịch vụ hợp pháp thì đây có thể là một lựa chọn hữu ích
Hiện tại “quỹ” này do công ty SignPath vận hành, nhưng họ nói rằng hy vọng một ngày nào đó quỹ sẽ mở rộng và trở thành một tổ chức độc lập do cộng đồng vận hành
Không biết câu “Developers, developers, developers!” đã đi đâu rồi
Điểm chung thường thấy ở các công ty công nghệ lớn là ban đầu trông có vẻ tốt, nhưng vài năm sau sự mục ruỗng bắt đầu len lỏi, và nếu tồn tại đủ lâu thì cuối cùng sẽ biến thành một thực thể ký sinh
Một công ty tầm cỡ Microsoft chẳng lẽ lại không thể tạo ra cách để thế giới tự do và nguồn mở mà họ nói là ủng hộ có thể phân phối trên nền tảng của họ mà không gặp phiền toái hay chi phí
Những ma sát kiểu này nhân danh bảo mật thì lúc nào cũng tình cờ có lợi cho doanh thu
Mong chi phí chứng chỉ ký số được hạ xuống trên diện rộng
Tối đa khoảng 10 USD là đủ
Với những phần mềm chuyên biệt chỉ có rất ít người dùng, mức chi phí hiện nay không thể biện minh được
Lý do duy nhất tôi có thể nghĩ ra cho việc phải đắt như vậy là số tiền phải đủ lớn để chủ sở hữu hợp pháp của thẻ bị đánh cắp nhận ra
Bản thân điều đó có thể được xem như một dạng xác minh tác giả
Nếu vậy thì sau 3 tháng hoàn lại một phần hoặc toàn bộ cũng được chứ
Ngay cả nếu là vì mục đích xác minh, gần như không có lý do gì phải thu tiền hằng năm cho việc xác minh đó, và rốt cuộc trông giống tìm kiếm đặc lợi hơn
Theo tôi nhớ thì Store là $19 trả một lần, không phải phí lặp lại hay hằng năm
Vì vậy vấn đề này chỉ áp dụng khi phân phối bên ngoài Store
Lý do chứng chỉ đắt là vì chính phủ chưa được số hóa và không xử lý tốt mật mã học, nên cần rất nhiều thao tác thủ công để liên kết quyền sở hữu khóa riêng với quyền sở hữu danh tính pháp lý
Tổ chức chứng thực phải tra cứu thông tin đăng ký trên website của từng quốc gia, nhiều khi không có API, phải gọi điện, xem xét bản scan hộ chiếu, v.v.
Tất cả những việc đó đều tốn nhân công nên trở nên đắt đỏ
Nếu chính phủ tự vận hành hạ tầng khóa công khai và cấp kèm khóa riêng khi đăng ký công ty, hoặc nếu hộ chiếu có khóa riêng dùng để ký tài liệu, thì chi phí có thể rẻ hơn nhiều
Đáng tiếc là từ lâu đã không có tiến triển, và hầu hết vài quốc gia từng thử nghiệm hạ tầng khóa công khai quốc gia cũng đã từ bỏ
Mỹ chưa từng thử triển khai hạ tầng khóa công khai của chính phủ ở quy mô lớn ngoài Bộ Quốc phòng, nên các công ty phần mềm Mỹ cũng không cảm thấy cần phải hỗ trợ smart card cho tốt
Các hệ điều hành phổ biến không có hỗ trợ vững chắc và tiêu chuẩn cũng thiếu
Thêm vào đó còn có gánh nặng vận hành cao mà Microsoft với tư cách bên tiêu thụ chứng chỉ và CA/Browser Forum yêu cầu từ các tổ chức chứng thực
Điều này cũng tốn chi phí
Phí hằng năm là để phân bổ chi phí theo thời gian
Khi cấp chứng chỉ lần đầu, tổ chức chứng thực tốn nhiều chi phí hơn mức phí 1 năm, nhưng nếu giả định người dùng sẽ dùng trong vài năm thì họ có thể vượt điểm hòa vốn và có chút lợi nhuận
https://www.gnu.org/philosophy/right-to-read.en.html
Càng sống lâu, tôi càng cảm nhận rõ RMS từng là Cassandra của thời hiện đại