2013-06-18 12 views
5

Mam exe, który używa Castle Windsor do wdrożenia mechanizmu wtyczki. Muszę sprawdzić, czy wtyczki, które ładuję, pochodziły ode mnie (i nie są złośliwym kodem).Uwierzytelnianie DLL w C#

Wierzę, że muszę podpisać zarówno plik exe, jak i bibliotekę dll za pomocą klucza asymetrycznego (być może SNK?). Po pierwsze jest to poprawne i jak mogę to zrobić? Po drugie jak mogę sprawdzić programowo w exe, że biblioteka dll pochodzi z zaufanego źródła?

+0

możliwe duplikat [.NET Assembly Plugin Security] (http://stackoverflow.com/questions/932339/net-assembly-plugin-security) –

Odpowiedz

5

Jeśli podpiszesz bibliotekę DLL, to w czasie wykonywania możesz sprawdzić StrongName biblioteki DLL przed jej załadowaniem.

Można również sprawdzić, czy klucz publiczny użyty do podpisania jest tym, którego oczekujesz.

Aby uzyskać klucz publiczny zespołu można to zrobić:

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

Właśnie sprawdziłem i nie ma już dobra odpowiedź na ten temat na StackOverflow tutaj:

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

+1

Referencje oddziaływania StrongName. Nie powinieneś "mieć", aby sprawdzić klucz. .Net po prostu nie załaduje zmodyfikowanego zestawu, który został podpisany. – Gusdor

+0

@Gusdor jednak jeśli ktoś silnie podpisałby zespół, który był złośliwy, nadal byłby ładowany? Musiałbym sprawdzić, czy klucz publiczny jest autoryzowaną wartością, aby upewnić się, że biblioteka DLL pochodzi od zaufanego programisty (tj. Mnie). – Liath

+0

Zapomniałem, że jest to system, który można podłączyć. Zabezpieczenia DLL są interesujące na otwartej platformie. Każdy może załadować twoje zgromadzenie i wyświetlić klucz publiczny, a następnie napisać złośliwą wersję (stąd, publiczny!). Czy rozważałeś użycie wtyczek w wtyczkach w domenach z częściową domeną zaufania? – Gusdor