放假了,博主呆在家实在无聊,于是开始鼓捣一些“乱七八糟”的东西。

这两天突然想到,能不能用自己的泛域名证书给文件签名?!于是就有了这篇文章。

并不能,呵呵

数字签名的用途和原理?

数字签名可以保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用 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.pfxabc.dllsigntool.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

原创文章,转载请以链接形式注明出处:http://blog.ttionya.com/article-942.html