我正在开发一个.NET package manager,让我思考的一件事就是安全性。
鉴于任何人都可能将程序集上传到存储库,如何验证所述程序集是否来自可靠来源?例如,如果用NHForge的私人密钥签名,我会更加信任NHibernate.dll
。为了确保这一点,我所要做的就是用NHForges的公钥验证装配签名。
现在,考虑到这一点,如何建立这种关系(这个特定的公钥属于这个特定的人)?我想出的一个想法如下:
.snk
文件中提取的作者私钥进行签名,该文件稍后用于对程序集本身进行签名要实现这个(这是一个可行的想法,BTW?),我需要一种以编程方式访问.snk
文件并阅读PK。在.NET中有什么东西吗?
答案 0 :(得分:1)
首先,强名称应不用作安全机制 - 它们仅用作程序集标识机制。对于这样的事情,我会研究Authenticode,它专门用于验证程序集的发布者/来源(即安全性而不仅仅是身份)。
话虽如此,您概述的想法并不可行,因为您无法使用强名称签署XML文件 - 强名称签名仅适用于.NET程序集。从理论上讲,您可以做的是为每个公钥维护某种特定发布者的某种映射(可能通过发布者注册过程或其他什么?),然后在将程序集的强名称签名添加到存储库之前验证它们。
至于技术方面,您可以通过StrongNameGetPublicKey
函数(属于非托管强命名API的一部分)从.snk
文件中提取公钥。但是,您必须自己将.snk
文件加载到内存中。