为exe文件进行数字签名-制作pfx自签名证书文件

前言

本文创作原因:

最近在gittee上发布一个exe程序时, 发现在下载和使用时, 浏览器和操作系统会报毒, 于是想到这可能是由于程序没有数字签名.(后来发现跟这个没关系,只要是直接下载exe文件都有风险提示)

但是一直没找到简单易上手的数字签名方法, 所以花费了一点时间整理出这篇文章.

一、工具准备&配置环境变量

1. 工具准备

1. 安装OpenSSL;

        推荐安装轻量级的版本;
适用于Windows的OpenSSL传送门:icon-default.png?t=O83Ahttps://slproweb.com/products/Win32OpenSSL.html

2. 安装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.icon-default.png?t=O83Ahttps://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. 在任务栏里搜索并点击编辑系统环境变量, 或者在控制面板里找到它;

 

1
2
3
4

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: 时间戳服务器路由

附: 

1. Python脚本打包为exe文件教程

2. signtool.exe官方文档

3. 如何安装OpenSSL?

4. Windows下的OpenSSL的使用教程

ps: 本文到此结束, 若有疑问, 欢迎在评论区发言.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值