zoukankan      html  css  js  c++  java
  • makecert 制作数字证书 给DLL加一个数字签名

    声明:文章整理自互联网

    我仅需要给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 "本次签名的描述" "被签名的程序的全路径"
    
  • 相关阅读:
    grunt in webstorm
    10+ Best Responsive HTML5 AngularJS Templates
    响应式布局
    responsive grid
    responsive layout
    js event bubble and capturing
    Understanding Service Types
    To add private variable to this Javascript literal object
    Centering HTML elements larger than their parents
    java5 新特性
  • 原文地址:https://www.cnblogs.com/guyk/p/9098058.html
Copyright © 2011-2022 走看看