通过延迟签名加密

来源:互联网 发布:上海淘宝美工学徒 编辑:程序博客网 时间:2024/05/06 05:43

保护你的私有密匙是非常重要的,如果某个恶意的人取得了你的密匙,他生成的组件将和你签过名的组件一样。因此,应当把你的密匙设于高度的保密状态,公司里面可能就只有几个人知道。这样以来,又怎么给你的组件签名呢?如果就只有你一个人知道密匙,这样会很繁琐,因为你必须为公司中每个开发者开发出来的每个组件签名。

很幸运的是.NET为这个问题提供了一个很好的方法:延迟签名。通过延迟签名,你可以在只知道公共密匙的情况下创建和测试组件。只有在组件实际分发给用户时才将私有密钥匙包含到组件。下面是使用延迟签名过程的一些技巧总结:

1. 从公共/私有密钥匙对中提取公共密匙。为了提取公共密匙,也就是存储公共/私有密匙对,你可以使用强名工具,命令行如下:

    sn.exe -p MyKeyFile.snk MyPublicKeyFile.snk

2. 将包含公共密匙的文件分发给公司所有的开发者,同时将包含公共/私有密钥匙对的文件安全存放。

3. 在组件信息文件中包含公共密匙的文件,并注明延迟签名。

    [assembly: AssemblyDelaySign(true)]
    [assembly: AssemblyKeyFile("..//..//MyPublicKeyFile.snk")]

如果你使用组件连接工具,而非Visual Studio .NET,你可以使用/delaysign命令行来表明延迟签名。

4.如果你把组件保存在全局程序集缓存(GAC)中,应关闭对组件的验证,因为GAC默认验证每个组件的强名。如果组件没有采用私有密钥匙来签名,这个验证将会失败。因此,出于开发和测试的目的你可以输入如下的命名行:

    sn.exe -Vr MyFile.dll

5. 这样,你就可以在开发和测试的时候很自由的使用组件

6. 当部署一个延迟签名的组件的时候,你必须通过私有密匙来给它签名。

    sn.exe -R MyFile.dll MyKeyFile.snk

7. 最后,你必须通知GAC重新开启对组件的验证。命名行如下:

    sn.exe -Vu MyFile.dll