2012-05-06 14 views

Trả lời

13

Câu trả lời đơn giản là có và không - nó phụ thuộc vào mục đích mà bạn mạnh mẽ ký tên hội đồng của bạn ở nơi đầu tiên.

Trang MSDN trên Strong-Name Signing tóm tắt hai mục đích khá tốt.

Đặt tên mạnh sẽ cung cấp cho ứng dụng hoặc thành phần một mã nhận dạng duy nhất phần mềm khác có thể sử dụng để tham chiếu rõ ràng với nó. Ví dụ: đặt tên mạnh cho phép tác giả và quản trị viên ứng dụng chỉ định phiên bản dịch vụ chính xác được sử dụng cho thành phần được chia sẻ. Điều này cho phép các ứng dụng khác nhau chỉ định các phiên bản khác nhau mà không ảnh hưởng đến các ứng dụng khác. Ngoài ra, bạn có thể sử dụng tên mạnh mẽ của một thành phần làm bằng chứng bảo mật để thiết lập mối quan hệ tin cậy giữa hai thành phần.

Bất kỳ thư viện được phân phối công khai nào (DLL) phải được ký tên mạnh, miễn là nó được dự định sẽ được người dùng cuối sử dụng. (ví dụ: Trừ khi nó là chi tiết thực hiện hoặc như vậy.)

Mục đích chính của việc ký tên mà tôi thấy có nhiều lý do kỹ thuật hơn, bao gồm nhận dạng duy nhất (không gian tên đôi khi có thể vô tình đụng độ) và lắp ráp GAC. Trong những trường hợp như vậy, việc cung cấp tệp khóa công khai có sẵn không có tác động bảo mật, bởi vì không có tệp nào được dự định ở vị trí đầu tiên. Không có đảm bảo nào về sự tin cậy/nguồn gốc được cung cấp, nhưng nhận dạng duy nhất vẫn hợp lệ. Trang MSDN chủ yếu thảo luận về kịch bản này; những lúc bạn nên và không nên ký một hội đồng; và các chi tiết xung quanh.

Nếu bạn đang ký hợp đồng với mục đích xác thực - cụ thể, để đảm bảo cho người tiêu dùng rằng hội đồng đến từ nguồn được xác nhận quyền sở hữu - thì một khóa được công khai hoàn toàn vô hiệu mô hình tin cậy này. Đó là, bất cứ ai có thể đi sửa đổi mã dự án của bạn tùy ý, và xây dựng lại và từ chức hội đồng của bạn một cách chính xác, cơ bản giả mạo danh tính của bạn. Các trang MSDN không địa chỉ này sử dụng cũng không may (có lẽ bởi vì nó cần phải được xem xét rộng rãi hơn như một phần của một chiến lược an ninh), nhưng điều quan trọng là dù sao.

Cuối cùng, lưu ý rằng có hai loại tệp chứng chỉ khóa mà CLR/.NET sử dụng để ký các assembly. Đầu tiên là một SNK, như bạn đề cập đến; điều này không được bảo vệ bằng mật khẩu. Thứ hai là PFX, đây thực sự chỉ là một phiên bản được bảo vệ bằng mật khẩu của một tệp khóa SNK. Miễn là mật khẩu này đủ an toàn, do đó có không có vấn đề bảo mật khi phân phối PFX được bảo mật bằng phần mềm nguồn mở của bạn. Visual Studio (và tiện ích tạo khóa dòng lệnh) tất nhiên là có khả năng tạo cả hai.

+0

Bạn cũng có thể muốn xem câu trả lời này và ngoại suy một cách thích hợp cho các tệp khóa PFX. – Noldorin

+0

Và 'sn.exe' là tiện ích tạo/thao tác tên mạnh mà bạn muốn nếu chạy từ dòng lệnh. Nó cung cấp một vài tính năng công bằng, hầu hết trong số đó bạn có thể sẽ không bao giờ cần. http://msdn.microsoft.com/en-us/library/k5b5tt23%28v=vs.100%29.aspx – Noldorin

Các vấn đề liên quan