自建CA实战之 《0x03 代码签名》
本文针对Windows平台,介绍如何使用自建CA来签发代码签名证书。
之前的文章中,我们介绍了如何自建CA,以及如何使用自建CA来签发Web服务器证书、客户端证书。
本文将介绍如何使用自建CA来签发代码签名证书。用于给程序签名。
代码签名的好处是:
- 证明程序的作者是谁。
- 证明程序没有被篡改过,没有被木马病毒感染过,凡是修改过一个字节,都会导致签名验证失败。
创建支持代码签名的证书
来源
选项卡中选择我们创建的CA。
主体
选项卡中按需填写,就不再细说了。
扩展
选项卡中,选择代码签名(Code Signing)
,下图中多选了Microsoft Individual Code Signing
和 Microsoft Commercial Code Signing
,这两个选项是为了兼容性考虑,如果只是给自己的程序签名,可以只选Code Signing
即可。
文末对这三个选项有比较详细的说明。
与上一章节导出客户端证书一样,这里我们导出格式选择pfx,然后设置密码。
使用代码签名证书签名程序
Windows代码签名工具下载
https://raw.githubusercontent.com/taills/tools/master/SignTool.zip
无法直接点击下载的,可以到仓库中下载。
https://github.com/taills/tools
我们把导出的证书文件拷贝到桌面,以及把我们要签名的程序拷贝到桌面。
注意:这里证书**不用双击打开导入!**因为我们要使用命令行工具来签名程序。
我们这里使用的是记事本(notepad.exe)
程序,当然你也可以使用其他程序。
cd C:\Users\Administrator\Desktop
xcopy C:\Windows\System32\notepad.exe .
我们查看记事本程序的属性,发现它并没有签名。
我们使用signtool
工具来给记事本程序签名。
Microsoft Windows [版本 10.0.19044.1288]
(c) Microsoft Corporation。保留所有权利。C:\Users\admin>cd DesktopC:\Users\admin\Desktop>xcopy C:\Windows\System32\notepad.exe .
C:\Windows\System32\notepad.exe
复制了 1 个文件C:\Users\admin\Desktop>SignTool\signtool.exe sign /f CodeSigning-WeiPang.pfx /p 12345678 notepad.exe
Done Adding Additional Store
Successfully signed: notepad.exeC:\Users\admin\Desktop>
我们再次查看记事本程序的属性,发现它已经被签名了。但是时间戳显示不可用,这是因为我们没有使用时间戳服务器,所以时间戳显示不可用。我们再次增加一个参数/t http://timestamp.digicert.com
,使用时间戳服务器来签名。
C:\Users\admin\Desktop>SignTool\signtool.exe sign /f CodeSigning-WeiPang.pfx /p 12345678 /t http://timestamp.digicert.com notepad.exe
Done Adding Additional Store
Successfully signed: notepad.exe
再次查看属性,发现时间戳显示正常了。
总结
命令行签名的命令格式如下:
signtool sign /f 证书文件 /p 证书密码 /t 时间戳服务器 要签名的程序
三项代码签名证书的异同
-
证书类型:
- Microsoft Individual Code Signing(个人代码签名)证书:适用于个人开发者或个人使用的代码签名证书。
- Microsoft Commercial Code Signing(商业代码签名)证书:适用于商业实体或组织使用的代码签名证书。
- 普通的Code Signing证书:这是一个更通用的术语,指的是由各种证书颁发机构(如Symantec、Comodo、DigiCert等)颁发的代码签名证书。
-
证书颁发机构:
- Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书由Microsoft自己的证书颁发机构颁发。
- 普通的Code Signing证书由各种证书颁发机构颁发,不限于Microsoft。
-
应用范围:
- Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书主要用于Microsoft平台(如Windows操作系统、Office等)上的代码签名。
- 普通的Code Signing证书可以用于多个平台,包括Windows、macOS、Linux等。
-
验证和信任:
- Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书在Microsoft平台上享有更高的信任级别,因为它们由Microsoft颁发。
- 普通的Code Signing证书的信任级别取决于颁发机构的声誉和受信任的根证书列表。
-
价格和购买渠道:
- Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书通常具有较高的价格,并且只能通过Microsoft的官方渠道购买。
- 普通的Code Signing证书的价格和购买渠道因证书颁发机构而异,通常有更多的选择。
总的来说,Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书是专为Microsoft平台开发者和商业实体设计的,享有更高的信任级别,但价格较高且适用范围有限。普通的Code Signing证书则更通用,可以适用于多个平台,但信任级别可能因颁发机构的声誉而异。选择适合自己需求的证书时,可以考虑具体的使用场景、平台要求和预算等因素。