Как экспортировать сертификат в Windows на Python

Я пишу программу Python, которой необходимо экспортировать сертификат из хранилища сертификатов в Windows. Я пытался найти фрагмент кода, который делает это, но у меня возникли проблемы с поиском того, который делает это. Здесь важно то, что мне нужно экспортировать сертификат с закрытым ключом из хранилищ сертификатов, принадлежащих машине и текущему пользователю.

Моей целью было использовать сертификат для аутентификации в Azure Key Vault. На основании принятого ответа невозможно получить сертификат из хранилища сертификатов в Windows. Вместо этого я решил написать приложение C# для аутентификации в Azure Key Vault и передачи секретов приложению Python.


person Hydrosis    schedule 12.04.2019    source источник


Ответы (1)


Вы можете отправить вызов подпроцесса в 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()
person James    schedule 12.04.2019
comment
Я предполагаю, что нет возможности экспортировать сертификат изначально в Python. Мне нравится ваш ответ, одним из предложений было бы переписать это как функцию, которая принимает отпечаток пальца и пароль. Кроме того, 3-й элемент в массиве должен быть экранирован первой открывающей фигурной скобкой. - person Hydrosis; 13.04.2019