程序集延迟签名-学习笔记

背景:为了防止私钥泄露,公司里只有少数几个人才能访问到私钥。其他同事开发时,也需要编译,但不又能给他们密钥,我们就需要使用延迟签名技术了。

1.       创建密钥对

sn -k mykeyfile.pfx

无密码保护,该文件需要安全保管

2.       安装密钥对到于强名称 CSP 中容器

sn -i mykeyfile.pfx mykeycontainer

3.       提取公钥文件

sn -p mykeyfile.pfx mykeyfile.pub

4.       显示公钥标记

(短,2780ccd10d57b246这种),用于-Vr选项

sn -q -t mykeyfile.pub

5.       显示完整公钥

用于assembly: InternalsVisibleTo的PublicKey

sn -q -tp mykeyfile.pub

6.       使CLR暂时信任程序集的内容

注册要跳过验证的程序集,使CLR暂时信任程序集的内容,不对它进行哈希处理,也不对哈希值进行比较。这使程序集能顺利安装到GAC(如果有必要的话)。现在,可以生成引用了这个程序集的其他程序集,并可随意测试程序集,否则会报错(程序签名无效或被串改)。注意,在每台开发用的机器上,以下命令行都只需执行一次,不必在每次生成程序集时都重复这一步:

sn -Vr MyAssembly.dll

或所有这个PublicKey的程序集sn-Vr *,2780ccd10d57b246

7.       设置项目为延迟签名

命令行方式:csc/keyfile: mykeyfile.pub /delaysign MyAssembly.cs

UI方式:在项目中,选择签名文件选择mykeyfile.pub, 然后钩上“延迟签名”

8.       真正发布

结束一个程序集的开发和测试之后,需要正式对其进行签名,以便打包和部署它。为了对程序集进行签名,要再次使用SN.exe实用程序,但这一次换用-R开关,并指定包含了私钥的文件的名称。-R开关指示SN.exe对文件内容进行哈希处理,用私钥对其进行签名,并将RSA数字签名嵌入文件中之前预留的空间。经过这一步之后,就可以部署完全签好名的程序集。在开发和测试机器上,不要忘记使用SN.exe的-Vu或-Vx命令行开关来重新启用对这个程序集的验证。

sn -Vu MyAssembly.dll

sn -Vu *,2780ccd10d57b246

使用 infile 中的密钥对,为先前已签名的程序集或延迟签名的程序集重新签名。

SN.exe -R MyAssembly.dll mykeyfile.pfx

使用 container 中的密钥对,为先前已签名的程序集或延迟签名的程序集重新签名。

SN.exe -Rc MyAssembly.dll mykeycontainer

重新编译方式

msbuild/p:KeyPairContainer=mykeycontainer,PublicKeyFile="<完整路径> \mykeyfile.pub"

如果公钥/私钥对在一个CSP容器中,必须为CSC.exe、AL.exe和SN.exe程序指定不同的开关。编译时(CSC.exe),要指定/keycontainer开关,而不是/keyfile开关;链接时(AL.exe),要指定/keyname开关,而不是/keyfile开关;使用强名称程序(SN.exe)对一个延迟签名的程序集进行重新签名时,要指定-Rc开关,而不是-R开关。

重要提示  打包一个程序集前,只要你希望对它执行其他任何操作,延迟签名都非常有用。例如,可能想要对自己的程序集运行一个混淆器(obfuscator)程序。程序集在完全签名后,便不能再对它运行混淆器,否则哈希值就不正确了。所以,要想混淆一个程序集文件,或者进行其他形式的"生成后"(post-build)操作,就应该使用延迟签名,执行所有必要的"生成后"操作,再用-R或-Rc开关运行SN.exe,最终完成对程序集的签名。

时间: 2024-10-12 10:22:08

程序集延迟签名-学习笔记的相关文章

.net程序集强名称签名实践

引用:  http://www.cnblogs.com/cpcpc/archive/2011/01/17/2123086.html 强名称是由程序集的标识加上公钥和数字签名组成的.其中,程序集的标识包括简单文本名称.版本号和区域性信息(如果提供的话).强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的.Microsoft? Visual Studio? .NET 和在 .NET Framework SDK 中提供的其他开发工具能够

[原创]java WEB学习笔记88:Hibernate学习之路-- -Hibernate检索策略(立即检索,延迟检索,迫切左外连接检索)

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这

强命名程序集,签名,延迟签名

强命名程序集 如果一个程序集有一个唯一的标记,那么这个程序集就可以叫做强命名程序集.在.NET框架中是通过公钥/私钥加密来产生这个唯一标记的.一个强命名程序集包含四个唯一标志程序集的特性:文件名(没有扩展名),版本号,语言文化信息(如果有的话),公有秘钥. 这些信息存储在程序集的清单(manifest)中.清单包含了程序集的元数据,并嵌入在程序集的某个文件中.下面的字符串标识了二个不同的程序集文件: “MyType, Version=1.0.1.0,Culture=neutral, Public

SpringNet学习笔记一

---恢复内容开始--- 最近看了园子里的大神分享的springnet框架的知识,感觉挺不错的,自己闲下来也研究研究springnet.这几天看了springnet容器的基础篇IOC和AOP,也有点个人理解分享一下,记录一下自己的学习笔记,欢迎大家提出问题一块研究解决. 入门springnet首先了解一下什么是控制反转,首先控制反转(Inversion of Control,英文缩写为IoC),也叫依赖注入(Dependency Injection).      个人理解springnet的控制

DBus学习笔记

摘要:DBus作为一个轻量级的IPC被越来越多的平台接受,在MeeGo中DBus也是主要的进程间通信方式,这个笔记将从基本概念开始记录笔者学习DBus的过程 [1] DBus学习笔记一:DBus学习的一些参考资料[2] DBus学习笔记二:什么是DBus?[3] DBus学习笔记三:DBus的一些基本概念 一些基本概念的解释和翻译:http://blog.mcuol.com/User/AT91RM9200/Article/12816_1.htmhttp://www.cnblogs.com/wzh

Citrix NetScaler产品学习笔记之一:Citrix NetScaler概述

简要介绍 CitrixNetScaler.其关键功能和特性以及可供使用的不同产品版本. 具体模块: 解释 CitrixNetScaler 如何解决应用程序交付难点问题. 描述 NetScaler10 功能. 说明如何通过AppExpert.AppFlow 和 ActionAnalytics 了解应用程序行为.性能和安全性. 了解每个NetScaler 产品版本所包含的功能. 产品说明 Citrix NetScaler 使数据中心成为端对端服务交付结构,可以优化所有 Web 应用程序.基于云的服务

VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Excel的内置公式虽然强大,但是在ERP等系统中,往往需要进行很多业务上的计算,如收发存台账.指定年.月.部门的消耗查询等,都是需要从数据库中查询的,且和业务紧密相连.这时仅仅依靠Excel的内置公式就不够了,需要添加自定义的公式来进行这些业务计算. 测试代码下载 本系列所有测试代码均在Visual St

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对