放假了,博主呆在家实在无聊,于是开始鼓捣一些“乱七八糟”的东西。
这两天突然想到,能不能用自己的泛域名证书给文件签名?!于是就有了这篇文章。
并不能,呵呵
数字签名的用途和原理?
数字签名可以保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用 HASH 函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
为了给 *.dll
和 *.exe
文件签名,博主先去搜了搜有没有什么提供签名的工具,果然,微软提供了一个叫做 SignTool 的工具给文件签名。
先提供有关于 SignTool 工具的信息:
SignTool 使用方法:MSDN
SignTool 工具:如果您装过微软的开发工具,可以尝试找到 Microsoft SDKs,具体位置为
64位系统:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe
32位系统:C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe
如果没有找到以上路径,请自行下载安装 Microsoft Windows SDK for Windows 7 and .NET Framework 4,或从百度网盘下载。
对照着 MSDN 的示例,博主先进行测试。
signtool sign /a abc.dll signtool sign /t http://timestamp.verisign.com/scripts/timstamp.dll /a abc.dll /t http://timestamp.verisign.com/scripts/timstamp.dll 表示签名时带上时间戳 /a 表示自动找寻一个最佳的签名证书 给dll签名后,提示签名成功,但是查看签名的证书,证书不受信任,因为给dll签名的证书是计算机自带的自签名证书
于是博主想看看能不能用自己的泛域名证书来签名…(。・ω・。)博主会有这种想法还真是才疏学浅…
可是,博主的证书只有一个私钥文件,一个链证书文件和一个证书文件,但是用于签名的必须是“个人信息交换 (PFX) 格式”,所以先要把之前的文件转换为 .pfx
格式。
发现用 openssl 来转换非常方便快捷,所以使用 openssl 来转换文件格式。
PS:openssl 有 Windows 版本,但是要自己编译,比较麻烦。建议用 Linux 完成,没有 Linux 系统就没办法啦( ̄3 ̄)
#先把私钥文件(ca.key)和证书文件(ca.crt)弄到linux里 cd /tmp/ openssl pkcs12 -export –in ca.crt -inkey ca.key -out ca.pfx #openssl会要求你对.pfx文件设置密码,建议设置强密码,本文以ttionya为例 #之后将ca.pfx文件取回本地计算机
将 ca.pfx
取回本地后,把 ca.pfx
、abc.dll
、signtool.exe
三个文件放在一个文件夹内(为了方便),打开 CMD,来到该目录下。
signtool sign /f ca.pfx /p ttionya abc.dll signtool sign /f ca.pfx /p ttionya /t http://timestamp.verisign.com/scripts/timstamp.dll abc.dll /f 表示选取使用的.pfx文件 /p 由于.pfx文件含有密码,所以要带上该文件的密码
执行完后,失败了,华丽丽地失败了_(:3」∠)_
报错内容:SignTool Error: No certificates were found that met all the given criteria.
为毛为毛(╯°口°)╯(┴—┴
然后仔细查看自己的证书,发现原来自己的证书只支持“服务器身份验证”和“客户端身份验证”两种目的….难怪会失败
再次测试,发现,只要证书没有“代码签名”目的就不能给文件签名
博主又因为自己的无知浪费了生命,不然去看动漫多好_(:3」∠)_
PS:接下来带上自签名一张证书的方法,依旧要用到 openssl
openssl genrsa -out ca.key 2048 #算法RSA,长度2048位,输出为ca.key openssl req -new -x509 -days 365 -key ca.key -out ca.crt #新生成一张x509标准,365天有效期的证书,私钥为ca.key,输出为ca.crt openssl pkcs12 -export –in ca.crt -inkey ca.key -out ca.pfx
原创文章,转载请以链接形式注明出处:https://blog.ttionya.com/article-942.html