2013-06-18 27 views
5

Tôi có một exe sử dụng Castle Windsor để triển khai cơ chế plugin. Tôi cần phải xác minh rằng các plugin tôi tải đến từ tôi (và không phải là một số mã độc hại).Xác thực các tệp DLL trong C#

Tôi tin rằng tôi cần ký cả exe và dll với khóa không đối xứng (có thể là SNK?). Thứ nhất là điều này đúng và làm thế nào tôi có thể làm điều này? Thứ hai làm thế nào tôi có thể xác minh lập trình trong exe rằng dll đến từ một nguồn đáng tin cậy?

+0

thể trùng lặp của [.NET Assembly Plugin Security] (http://stackoverflow.com/questions/932339/net-assembly-plugin-security) –

Trả lời

5

Nếu bạn ký DLL của bạn sau đó tại thời gian chạy, bạn có thể kiểm tra StrongName của DLL trước khi bạn tải nó.

Bạn cũng có thể kiểm tra xem khóa công cộng được sử dụng để ký tên có phải là khóa công khai mà bạn mong đợi hay không.

Để có được chìa khóa công cộng của một assembly, bạn có thể làm điều này:

Assembly assembly = ... 
AssemblyName assemblyName = assembly.GetName(); 
byte[] publicKey = assemblyName.GetPublicKey(); 

Tôi chỉ cần kiểm tra và có đã là một câu trả lời tốt về vấn đề này trên StackOverflow đây:

https://stackoverflow.com/a/1350012/106159

+1

Tham chiếu tác động của StrongName. Bạn không nên 'có' để kiểm tra chìa khóa. .Net sẽ không tải một hội đồng giả mạo đã được ký kết. Tuy nhiên, – Gusdor

+0

@Gusdor nếu một người nào khác đã ký một bản lắp ráp độc hại mạnh thì nó vẫn sẽ được tải? Tôi cần kiểm tra khóa công khai là giá trị được ủy quyền để đảm bảo rằng DLL đến từ một nhà phát triển đáng tin cậy (tức là tôi) – Liath

+0

Tôi quên rằng đây là một hệ thống có thể cắm được mà bạn đang nói đến. Bảo mật DLL là thú vị trên một nền tảng mở. Bất cứ ai cũng có thể tải lắp ráp của bạn và xem khóa công khai sau đó viết một phiên bản độc hại (do đó, công cộng!). Bạn đã xem xét hộp cát các plugin trong miền ứng dụng tin cậy một phần chưa? – Gusdor