在MSYS2环境中,我们可能需要安装证书。比如,安全软件可能会在系统中安装根证书以解密HTTPS流量,而这些证书默认不会被MSYS2信任,会导致使用curl
等工具时出现SSL相关异常。

分步操作
-
导出证书:对于已经安装的证书,我们可以直接打开certmgr.msc
,找到对应的证书。其一般位于「受信任的根证书颁发机构」下。右键点击此证书,选择「所有任务」 -> 「导出」,选择DER编码二进制X.509 (.CER)
格式导出。
-
复制证书:将证书复制到MSYS2的/etc/pki/ca-trust/source/anchors/
目录下。
-
更新证书:在MSYS2中执行以下命令:
这样,MSYS2就会更新证书链,包含了我们刚刚添加的证书。
自动操作
对于可能会时常更新的证书,我们可以使用脚本自动化操作。以下是一个简单的PowerShell脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| function Test-Admin { $identity = [System.Security.Principal.WindowsIdentity]::GetCurrent() $principal = New-Object System.Security.Principal.WindowsPrincipal($identity) return $principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) }
if (-not (Test-Admin)) { Write-Host "没有管理员权限,正在请求提权..." Start-Process -FilePath "powershell.exe" -ArgumentList "-File `"$PSCommandPath`"" -Verb RunAs exit }
Write-Host "管理员权限确认,继续执行操作..."
$msys2Path = "C:\msys64" $certificateName = "Kaspersky Anti-Virus Personal Root Certificate" $certificateFileName = "kaspersky-root-cert.cer" $certificateFilePath = "$msys2Path\etc\pki\ca-trust\source\anchors\$certificateFileName"
$rootCert = Get-ChildItem -Path Cert:\LocalMachine\Root | Where-Object { $_.Subject -like "*$certificateName*" }
if ($rootCert) { Write-Host "找到证书,开始导出..." $rootCertBytes = $rootCert.Export('Cert') [System.IO.File]::WriteAllBytes($certificateFilePath, $rootCertBytes) Write-Host "证书已成功导出到: $certificateFilePath" } else { Write-Host "未找到指定的证书: $certificateName" exit }
Write-Host "刷新 MSYS2 证书存储..." & "$msys2Path\msys2_shell.cmd" -msys2 -c "update-ca-trust" Write-Host "证书刷新完成!"
|
$msys2Path
、$certificateName
、$certificateFileName
等变量需要根据实际情况修改。
脚本的工作流程与上述的分步操作相同,不过添加了提权过程,确保能够将证书文件写入MSYS2的安装目录。