前言
本文创作原因:
最近在gittee上发布一个exe程序时, 发现在下载和使用时, 浏览器和操作系统会报毒, 于是想到这可能是由于程序没有数字签名.(后来发现跟这个没关系,只要是直接下载exe文件都有风险提示)
但是一直没找到简单易上手的数字签名方法, 所以花费了一点时间整理出这篇文章.
一、工具准备&配置环境变量
1. 工具准备
1. 安装OpenSSL;
推荐安装轻量级的版本;
适用于Windows的OpenSSL传送门:https://slproweb.com/products/Win32OpenSSL.html2. 安装Windows SDK(主要使用SignTool.exe);Windows SDK - Windows app development | Microsoft DeveloperThe Windows SDK for Windows 11 contains headers, libraries, and tools you can use when you create apps that run on Windows.https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/
2. 配置环境变量
配置环境变量的原因: 不配置的话, 系统不能自动找到这些工具的位置, 就需要使用绝对路径使用这些工具, 就会比较麻烦;
1. OpenSSL的环境配置
将包含openssl.exe的路径添加进系统环境变量Path中(会操作的话请自行跳过下面的教程);
1. 找到OpenSSL的安装位置 --> 找到openssl.exe文件 --> 将这个文件的目录复制下来;
(比如我的电脑上是```C:\Program Files\OpenSSL-Win64\bin```)
2. 在任务栏里搜索并点击编辑系统环境变量, 或者在控制面板里找到它;
2. Windows SDK的环境配置
将包含signtool.exe的路径添加到系统环境变量Path中;
1. 找到 Windows SDK的安装位置 --> 找到signtool.exe文件 --> 将这个文件的目录复制下来;
(比如我的电脑上是```C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64```)
2. 将这个路径```C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64```添加到系统环境变量Path中(和上面同理, 自行添加, 不做演示);
二、自制数字证书
1. 打开命令提示符(cmd)
1. 选择一个用于存放证书文件的文件夹;
2. 在目录位置输入```cmd```并ENTER;
2.生成私钥
在弹出的命令提示符窗口中执行以下代码:
openssl genrsa -out private_key.pem 2048
这将生成一个名为`private_key.pem`的2048位RSA私钥文件(当然,private_key只是个名字,以下将用这个作为演示);
3.生成证书签名请求(CSR)
在命令提示符窗口中执行以下代码:
openssl req -new -key private_key.pem -out certificate_request.csr
这将提示你输入一些信息(不要使用中文字符),如国家(中国-CN)、组织名称、密码(请记住它,下面还要用)等; 完成后,将生成一个名为`certificate_request.csr`的证书签名请求文件(一样的certificate_request只是个名字);
4.生成自签名证书
在命令提示符窗口中执行以下代码:
openssl x509 -req -days 365 -in certificate_request.csr -signkey private_key.pem -out certificate.pem
这将使用你的私钥对证书签名请求进行签名, 并生成一个名为`certificate.pem`的自签名证书文件. `-days 365`参数表示证书的有效期为365天;
5. 将私钥和证书合并为pfx文件
在命令提示符窗口中执行以下代码:
openssl pkcs12 -export -out certificate.pfx -inkey private_key.pem -in certificate.pem -password pass:your_password
将`your_password`替换为你设置的密码。这将生成一个名为`certificate.pfx`的pfx格式证书文件,其中包含私钥和证书;
这个certificate.pfx证书就可以用于数字签名或其他需要证书的场景;
ps: 自签名证书并不能直接受操作系统与浏览器的信任, 如果您想要大规模发布您的程序, 请向权威CA机构购买数字证书;
三、为exe文件添加数字证书
1. 将刚刚制作好的 certificate.pfx 文件和您的exe文件放在同一目录下;
2. 在该目录下启动cmd, 并执行以下命令:
signtool sign /f "./certificate.pfx" /p "your_password" /fd sha256 /t "http://timestamp.digicert.com" "./your_script.exe"
将`./certificate.pfx`替换为你的证书文件路径,`your_password`替换为证书密码,`./your_script.exe`替换为你的exe文件路径;
然后, 您的exe文件就已经完成了数字签名, 请记得保存certificate.pfx证书, 以备下次使用;
附: 指令解释
signtool sign /f "pxf证书路径" /p "设置的密码" /fd 哈希算法 /t "时间戳服务器路由" "需要签名的exe文件路径" /f: pxf证书路径 /p: 设置的密码 /fd: 哈希算法(推荐使用sha256) /t: 时间戳服务器路由
附:
3. 如何安装OpenSSL?
ps: 本文到此结束, 若有疑问, 欢迎在评论区发言.