答案1
最简单的解决方案是创建一个自签名 CA(C证书A授权),使用它来签署代码签名证书,然后该证书签署BPSRegWD64.dll
(假设你 100% 信任该库)。
用于openssl
创建 CA 和代码签名证书,然后SignTool.exe
签署BPSRegWD64.dll
- 安装OpenVPN,确保
C:\Program Files\OpenVPN\bin
已添加到系统PATH
OpenSSL 不会创建 Windows 二进制文件,因此安装捆绑的软件更简单 下载
openssl.cnf
创建所需证书(KU 和 EKU 信息):
另存为%UserProfile%\Documents\SSL\openssl.cnf
;要求命令/信息从第 430 行开始通过 PowerShell 终端为 OpenSSL 创建所需的目录和文件:
WinKey+R>打开:Powershell
> 确定# Create PowerShell variable for $docs: $docs = [Environment]::GetFolderPath("MyDocuments") # Create OpenSSL Directories MkDir "$docs\SSL\ca" MkDir "$docs\SSL\cert" MkDir "$docs\SSL\crl" MkDir "$docs\SSL\csr" MkDir "$docs\SSL\key" MkDir "$docs\SSL\p12" # Create File: crlnumber Echo 01 > "$docs\SSL\crl\crlnumber" # Create File: index Echo > "$docs\SSL\index" # Create File: rand Echo > "$docs\SSL\rand" # Create File: serial Echo 00 > "$docs\SSL\serial" # Enter SSL Directory Cd "$docs\SSL"
生成自签名CA:
OpenSSL req -x509 -new -sha512 -days 3650 -newkey rsa:4096 -keyout ".\ca\CA.key.pem" -out ".\ca\CA.crt.pem" -config ".\openssl.cnf" -extensions v3_signing_ica
CA 密钥应具有安全密码至少20个字符,至少包含:
2个大写字母、2个小写字母、2个数字和2个符号生成 CSR (C证书年代点火R马术)获取签名证书:
修改openssl.cnf
244行()email.1 = [email protected]
使用用户的电子邮件,然后:OpenSSL req -out ".\csr\Signing.csr" -new -days 3650 -sha512 -newkey rsa:2048 -keyout ".\key\Signing.key.pem" -config ".\openssl.cnf" -extensions v3_codesign
证书密钥应具有安全密码至少16 个字符内联#2.2
使用 CA 签署签名证书:
OpenSSL x509 -req -sha512 -days 3650 -in ".\csr\Signing.csr" -CA ".\ca\CA.crt.pem" -CAkey ".\ca\CA.key.pem" -CAserial .\serial -out ".\cert\Signing.crt.pem" -extfile ".\openssl.cnf" -extensions v3_codesign
将签名证书导出为 PKCS12 证书:
OpenSSL pkcs12 -export -out ".\p12\Signing.p12" -inkey ".\key\Signing.key.pem" -in ".\cert\Signing.crt.pem" -certfile ".\ca\CA.crt.pem"
PKCS12 应该有一个安全密码至少16 个字符内联#2.2
将证书导入证书管理器(
certmgr.msc
):将扩展注册
.pem
为有效证书:
通过以下方式打开管理终端:WinKey+R>打开:Powershell
>CTRL+SHIFT> 确定Reg ADD "HKCR\.pem" /T REG_SZ /d CERfile ; Reg ADD "HKCR\.pem" /V "Content Type" /T REG_SZ /D application/x-x509-ca-cert ; Pause ; Exit
- 导入 CA 作为受信任的根证书颁发机构:
右键单击CA.crt.pem
> 安装证书 > 本地计算机 > 下一步 > 批准 UAC >
将所有证书放入以下存储中> 浏览... >受信任的根证书颁发机构
确定 > 下一步 > 完成 - 导入 PKCS12 作为 个人证书:
右击Signing.p12
> 安装 PFX > 当前用户 > 下一步 >文件名:%UserProfile%\Documents\SSL\p12\Signing.p12
> 下一步 > 输入密码 > 下一步 > 确定
通过以下方式签名
BPSRegWD64.dll
:-
创建
Sign.ps1
脚本:Cmd /C Echo '# ##::[[--- PowerShell Signing Script ---]]::## # Paramaters # #---------------------------------------------------------------- # Error if no file is specified: param([string] $file=$(throw "Please specify a script filepath.")) # Auto select user signing certificate: $Cert = Get-ChildItem -Path "Cert:\CurrentUser\My" -CodeSigningCert # SHA256 TimeStamp server: $timeStampURL = "http://sha256timestamp.ws.symantec.com/sha256/timestamp" # Script # #---------------------------------------------------------------- if($cert) { Set-AuthenticodeSignature -filepath $file -Certificate $Cert -HashAlgorithm SHA256 -TimestampServer $timeStampURL } else { throw "Did not find certificate with friendly name of `"$certFriendlyName`"" }' > "C:\Sign.ps1"
执行
Sign.ps1
:C:\Sign.ps1 "C:\Path\to\BPSRegWD64.dll"
-
- 安装Windows SDK: 桌面应用程序签名工具:
确保路径SignTool.exe
已添加到系统PATH
:Control Panel\All Control Panel Items\System
> 高级系统设置 >
环境变量 > 系统变量 > 路径 > 编辑 > 新建 >signtool.exe
路径 >
确定 > 确定 > 确定
示例路径:C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64
PowerShellSet-AuthenticodeSignature
可以签名某些文件扩展名,但SignTool
不能,反之亦然,但我不确定哪些文件可以签名,哪些文件不能签名,因此最好也安装 SDK 的SignTool
。
执行
SignTool.exe
:SignTool Sign /S My /FD SHA256 /TD SHA256 /TR "http://sha256timestamp.ws.symantec.com/sha256/timestamp" "C:\Path\to\BPSRegWD64.dll"
- 安装Windows SDK: 桌面应用程序签名工具:
-