声明:文章整理自互联网

我仅需要给dll添加(替换)一个签名,所以我只看了第一步和第三步,其余的部分我没有测试,不能保证内容的是否正确.

看了很多关于DLL加签名的教程 大多是错误的 完全无法正常走下去,所以整理了这个文章,仅为了方便自己下次需要这个功能的时候不用再折腾,本文内容大多抄自 makecert 制作数字证书

在MS的SDK中有个证书生成工具makecert.exe,可以使用这个工具来生成测试用的证书

第一步,生成一个自签名的根证书(issuer,签发者).

makecert -n "CN=Root,E=abcde@163.com" -r -sv RootIssuer.pvk RootIssuer.cer

在命令行中输入上述命令回车后,会弹出设置密码的文本框,设置完后请记密码后面会用到

在数字签名工具包文件夹下会多出2个文件,就是在刚才操作下生成的数字认证文件

代码说明:

makecert指的是数字签名工具包中的makecert.exe工具

RootIssuer.pvk RootIssuer.cer 是你要生成的数字认证文件,名字可以自定义

CN=Root,E=abcde@163.com 是签名人姓名和电子邮件地址

如果仅仅是给DLL添加数字签名,可直接跳转到第三步

第二步,使用这个证书签发一个子证书(使用者,subject)

makecert -n "CN=Child" -iv RootIssuer.pvk -ic RootIssuer.cer -sv ChildSubject.pvk ChildSubject.cer

此时,会弹出提示框先给这个子证书的私钥文件ChildSubject.pvk设置保护口令;

然后,输入这个子证书的私钥(在ChildSubject.pvk中)口令来获取子证书的公钥(在ChildSubject.cer中)

(pvk里面一般存储rsa算法结构,可以分别获取公钥和私钥)

接下来会提示输入根证书私钥(在RootIssuer.pvk中)口令来签发子证书(公钥和用户信息)

如果你还要签发更多的子证书,类似的,使用这个证书来签发再下层的证书,前提是ChildSubject证书也可以用于签发(作为Issuer)用途.

第三步,用第一步生成的数字签名,签名DLL文件

击文件夹下的signcode.exe文件,选择你要添加数字签名的.dll文件>>签名类型:自定义>>从文件选择中:选择刚才生成的RootIssuer.cer文件

磁盘中的私钥文件:选择wotuanOk.PVK>>输入刚设置的密码>>选择算法加密>>时间戳服务(免费的时间戳服务:WoTrus Free Timestamp Service)

完成后,在查看.dll属性就出来你想要的效果,这证书是自己颁发的!

备注:

(1)如果你需要一个交互证书,用于安全通信,那么,加入选项 -sky exchange;

(2)如果你需要一个签名证书来签发证书或者二进制文件,那么,加入选项 -sky signature.

(3)如果你需要一个客户端证书来标志你的身份,或者个人信息保护(电子邮件),那么,选项-n 中的E字段是不可缺少的.

举例:-n "CN=公司名称, E=E-MAIL地址, O=组织名称, OU=组织单位, C=国家, S=省份(州), P=县城"

(4)如果使用openssl的小工具来生成证书可以参考: http://blog.csdn.net/hacode/article/details/43834825

其他辅助工具:

1)公钥证书格式转换成SPC. cert2spc.exe

cert2spc TestRoot.cer TestRoot.spc

.spc 意思是 软件发布者证书(Software Pulisher Cerificate).

2)将公钥证书和私钥合并成一个PFX格式的证书文件.pvk2pfx.exe

pvk2pfx -pvk TestRoot.pvk -spc TestRoot.spc -pfx TestRoot.pfx

输入TestRoot.pvk的保护口令来合并.pvk和.spc文件,如果你不设置即将合并出来的TestRoot.pfx的保护口令的话,这个保护口令和输入文件TestRoot.pvk的保护口令一样.(备注:直接从cer文件也可以,不一定要得到SPC文件).

3)签名工具.signtool.exe

二进制文件数字签名.为了保证二进制文件的完整性,数字签名是一个好的方法.

以下命令启动一个有图形界面的文件签名工具向导:

signtool wizard

以下是命令行方式的签名:

signtool  sign /f "pfx文件的全路径" /p "pfx文件的保护口令" /t "http://timestamp.verisign.com/scripts/timstamp.dll" /d "本次签名的描述" "被签名的程序的全路径"

makecert 制作数字证书 给DLL加一个数字签名的更多相关文章

  1. makecert 制作数字证书

    在MS的SDK6.0中有个证书生成工具makecert.exe, 你可以使用这个工具来生成测试用的证书. 第一步,生成一个自签名的根证书(issuer,签发者). >makecert -n &q ...

  2. highestAvailable比较灵活,毕竟大多数功能不需要系统最高权限(四种方法:屏蔽UAC,右键以管理员身份运行,增加manisfest,制作数字证书)

    打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...

  3. 给.DLL文件加一个数字签名的方法

     给.dll文件加一个数字签名的方法 效果如图所示:   做法: 下载数字签名工具包:http://files.cnblogs.com/babyt/SignTool.rar  /Files/JavaC ...

  4. js数字每3位加一个逗号

    if(typeof val ==="number"){ var str = val.toString(); ? /(\d)(?=(\d{})+\.)/g : /(\d)(?=(?: ...

  5. 转: 数字证书原理 https 完整过程解析

    点评: 讲的非常的详细与全面,值得一看. 转: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 文中首先解释了加密解 ...

  6. [区块链|非对称加密] 对数字证书(CA认证)原理的回顾

    摘要:文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的 ...

  7. 数字证书原理(ssl,https)

    文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理, ...

  8. 公钥与私钥对HTTPS的理解(数字证书的需要)

    本文转自某大牛链接 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下window ...

  9. 数字证书原理 good

    文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理, ...

随机推荐

  1. 牛茶冲天的ip命令

    一.修改二层链路相关设置 1.修改网卡名称(修改前要先停止) ip link set eth0 name  testname 2.修改网卡地址 ip link set eth0 address xxx ...

  2. 十 Spring的AOP的底层实现:JDK动态代理和Cglib动态代理

    SpringAOP底层的实现原理: JDK动态代理:只能对实现了接口的类产生代理.(实现接口默认JDK动态代理,底层自动切换) Cglib动态代理(类似Javassist第三方的代理技术):对没有实现 ...

  3. kali apt update 错误——下列签名无效: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository

    这是因为key过期了 wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add apt update

  4. java list 清空列表所有元素

    Java list 清空列表所有元素 List<String> list = new ArrayList<String>(3);list.add("hello&quo ...

  5. Python学习第十九课——类的装饰器

    类的装饰器 # def deco(func): # print('==========') # return func # # # @deco #test=deco(test) # # def tes ...

  6. uniapp - 导航切换(样式)

    <view class="text-area" v-for="(menu,i) in menus" :key="i" v-show=& ...

  7. Java单例模式:为什么我强烈推荐你用枚举来实现单例模式

    单例模式简介 单例模式是 Java 中最简单,也是最基础,最常用的设计模式之一.在运行期间,保证某个类只创建一个实例,保证一个类仅有一个实例,并提供一个访问它的全局访问点.下面就来讲讲Java中的N种 ...

  8. 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ

    题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输 ...

  9. js保留两位小数的数字格式化方法

    // 格式化数字(保留两位小数) numberFormat (num) { let percent = Number(num.toString().match(/^\d+(?:\.\d{0,2})?/ ...

  10. SystemVerilog基本语法总结(中)

    Systemverilog 语法总结(中) 上一个博客分享了SV基本的概念,这一博客继续分享,等下一个博客分享一个公司的验证的笔试题目. l 事件 背景: Verilog中当一个线程在一个事件上发生阻 ...