如何在 Python 中导出 Windows 上的证书

How to Export Certificate on Windows in Python

我正在编写一个 Python 程序,需要从 Windows 上的证书存储中导出证书。我试过搜索执行此操作的代码片段,但找不到执行此操作的代码片段。这里重要的是我需要从属于机器和当前用户的证书存储中导出带有私钥的证书。

我的目标是使用证书对 Azure Key Vault 进行身份验证。根据已接受的答案,无法从 windows 上的证书存储中检索证书。相反,我决定编写一个 C# 应用程序来对 Azure Key Vault 进行身份验证并将机密传递给 Python 应用程序。

您可以向 powershell 发送子进程调用以从证书存储中导出证书。此脚本提示输入用户密码,然后将具有私钥的用户和本地计算机证书存储中的证书导出为 .pfx 文件。

import subprocess
import getpass

pw = getpass.getpass()

proc = subprocess.Popen(
    [
        'powershell.exe',
        '-c',
        f'&{{ $pw = ConvertTo-SecureString -String "{pw}" -Force -AsPlainText;',
        'gci Cert:\*\My\* |',
        '?{ $_.HasPrivateKey } |',
        '%{ Export-PfxCertificate -cert $_.PSPath',
        '-FilePath $env:USERPROFILE\$($_.thumbprint).pfx -Password $pw}',
        '}'
    ],
    stdout = subprocess.PIPE,
    stderr = subprocess.PIPE,
    shell = True
)

out, err = proc.communicate()