版权所有,转载请注明出处:http://guangboo.org/2013/05/05/digital-signature-for-exe-file
在之前的文章《py2exe+inno setup集成打包python程序》中,我们编写了python脚本,使得可以一键对python编写的windows程序进行打包,并编译成exe可执行文件,现在我们在此基础上添加对exe文件进行数字签名的脚本。
首先,在对exe文件进行数字签名时,当然要有一个pfx密钥文件,如果没有,可以使用windows sdk提供的工具创建一个,如下脚本:
makecert.exe -sv c:\mykey.pvk -n "CN=Comapy Name" c:\myCert.cer
cert2spc.exe c:\mycert.cer c:\mycert.spc
pvk2pfx -pvk c:\mykey.pvk -pi password -spc c:\mycert.spc -pfx c:\mycert.pfx -po password
那么有力pfx密钥文件,对exe进行签名的脚本也就变得非常简单,只需一段脚本即可:
signTool sign /f c:\mycert.pfx /p password /v c:\yourexefile.exe
在我的一个项目中,该项目是使用python+wxPython编写的一个windows桌面程序,需要对其进行打包,并编译成exe安装文件,我编写了一个脚本,可以一键完成这些工作。那么因此我也可以将数据签名的工作也放在这个脚本中完成。首先编写一个进行数据签名的方法,如下:
def signtool(filename):
import subprocess
signtool_exe = r'C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe'
pfx_file = 'c:\\mycert.pfx'
cmd = '%s sign /f %s /p password /v %s' % (signtool_exe, pfx_file, filename)
print cmd
proc = subprocess.Popen(cmd)
proc.wait()
为了集成到原来的脚本,需要在build_installer类的run方法中添加对signtool方法的调用,分别对主程序的exe文件和安装包文件进行签名:
dist_exe = 'myexefile.exe'
signtool(dist_exe)
signtool(script.get_setup_filename())
只有将上面的代码添加到run方法后面就可以了。