makecert制作数字证书给DLL加⼀个数字签名
科技主题绘画声明:⽂章整理⾃互联⽹
我仅需要给dll添加(替换)⼀个签名,所以我只看了第⼀步和第三步,其余的部分我没有测试,不能保证内容的是否正确.
看了很多关于DLL加签名的教程⼤多是错误的完全⽆法正常⾛下去,所以整理了这个⽂章,仅为了⽅便⾃⼰下次需要这个功能的时候不⽤再折腾,本⽂内容⼤多抄⾃
在MS的SDK中有个证书⽣成⼯具,可以使⽤这个⼯具来⽣成测试⽤的证书
第⼀步,⽣成⼀个⾃签名的根证书(issuer,签发者).
makecert -n "CN=Root,E=" -r -sv RootIssuer.
在命令⾏中输⼊上述命令回车后,会弹出设置密码的⽂本框,设置完后请记密码后⾯会⽤到
机械设计工程师在数字签名⼯具包⽂件夹下会多出2个⽂件,就是在刚才操作下⽣成的数字认证⽂件
代码说明:
makecert指的是数字签名⼯具包中的⼯具
平衡人生RootIssuer. 是你要⽣成的数字认证⽂件,名字可以⾃定义
巫族
CN=Root,E= 是签名⼈姓名和电⼦邮件地址
如果仅仅是给DLL添加数字签名,可直接跳转到第三步
第⼆步,使⽤这个证书签发⼀个⼦证书(使⽤者,subject)
makecert -n "CN=Child" -iv RootIssuer.pvk - -sv ChildSubject.
此时,会弹出提⽰框先给这个⼦证书的私钥⽂件ChildSubject.pvk设置保护⼝令;
然后,输⼊这个⼦证书的私钥(在ChildSubject.pvk中)⼝令来获取⼦证书的公钥(在中)
(pvk⾥⾯⼀般存储rsa算法结构,可以分别获取公钥和私钥)
接下来会提⽰输⼊根证书私钥(在RootIssuer.pvk中)⼝令来签发⼦证书(公钥和⽤户信息)
如果你还要签发更多的⼦证书,类似的,使⽤这个证书来签发再下层的证书,前提是ChildSubject证书也可以⽤于签发(作为Issuer)⽤途.
第三步,⽤第⼀步⽣成的数字签名,签名DLL⽂件
在以后的工作中击⽂件夹下的⽂件,选择你要添加数字签名的.dll⽂件>>签名类型:⾃定义>>从⽂件选择中:选择刚才⽣成的⽂件
磁盘中的私钥⽂件:选择wotuanOk.PVK>>输⼊刚设置的密码>>选择算法加密>>时间戳服务(免费的时间戳服务:)
完成后,在查看.dll属性就出来你想要的效果,这证书是⾃⼰颁发的!
备注:
(1)如果你需要⼀个交互证书,⽤于安全通信,那么,加⼊选项 -sky exchange;
(2)如果你需要⼀个签名证书来签发证书或者⼆进制⽂件,那么,加⼊选项 -sky signature.
(3)如果你需要⼀个客户端证书来标志你的⾝份,或者个⼈信息保护(电⼦邮件),那么,选项-n 中的E字段是不可缺少的.
举例:-n "CN=公司名称, E=E-MAIL地址, O=组织名称, OU=组织单位, C=国家, S=省份(州), P=县城"
(4)如果使⽤openssl的⼩⼯具来⽣成证书可以参考:
其他辅助⼯具:
1)公钥证书格式转换成SPC.
TestRoot.spc
.spc 意思是软件发布者证书(Software Pulisher Cerificate).
电子烟为什么被禁2)将公钥证书和私钥合并成⼀个PFX格式的证书⽂件.
pvk2pfx -pvk TestRoot.pvk -spc TestRoot.spc -pfx TestRoot.pfx
汉师附小输⼊TestRoot.pvk的保护⼝令来合并.pvk和.spc⽂件,如果你不设置即将合并出来的TestRoot.pfx的保护⼝令的话,这个保护⼝令和输⼊⽂件TestRoot.pvk的保护⼝令⼀样.(备注:直接从cer⽂件也可以,不⼀定要得到SPC⽂件).
3)签名⼯具.
谓语从句
⼆进制⽂件数字签名.为了保证⼆进制⽂件的完整性,数字签名是⼀个好的⽅法.
以下命令启动⼀个有图形界⾯的⽂件签名⼯具向导:
signtool wizard
以下是命令⾏⽅式的签名:
signtool sign /f "pfx⽂件的全路径" /p "pfx⽂件的保护⼝令" /t "/scripts/timstamp.dll" /d "本次签名的描述" "被签名的程序的全路径"