• 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 "本次签名的描述" "被签名的程序的全路径"
    
  • 相关阅读:
    transform.rotation和GetComponent<Rigidbody>().MoveRotation
    indexes和indices的区别
    AnimationState
    计算边缘光照
    Marshal.FreeHGlobal 方法 (IntPtr)
    切线空间(Tangent Space)
    Unity3D中使用Profiler精确定位性能热点的优化技巧
    最美的数学定理
    [唐诗]190襄阳歌-李白
    [唐诗]189长相思-李白
  • 原文地址:https://www.cnblogs.com/guyk/p/9098058.html
Copyright © 2020-2023  润新知