Не удалось получить доступ к ssl-сертификату из библиотеки осьминога как объект X509Certificate2 с помощью powershell

Я пытаюсь создать токен jwt, используя pfx, который я сохранил в библиотеке Octopus. Для этого мне нужно создать объект X509Certificate2, который принимает в качестве входных данных путь к сертификату и пароль. Может кто-нибудь предложить способ сделать это с помощью powershell?

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certpath,'password')

Я просмотрел некоторые документы о том, как получить доступ к переменным сертификата в осьминоге, но как я могу использовать их для создания объекта X509Certificate2. https://octopus.com/docs/deployment-process/variables/certificate-variables


person Biplab Adhikari    schedule 29.03.2019    source источник


Ответы (2)


После просмотра документации Microsoft и Octopus мне удалось заставить ее работать. Octopus хранит сертификат в виде строки в кодировке base64 в переменной с именем Cert.Pfx, а конструктор X509Certificate2 принимает массив байтов в качестве первого параметра. Итак, в качестве первого шага мне просто нужно было преобразовать строку в кодировке base64 в массив байтов.

$certbytearray=[System.Convert]::FromBase64String($OctopusParameters["Cert.Pfx"])
$CertPassKey="password"
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certbytearray,$CertPassKey)
person Biplab Adhikari    schedule 30.03.2019

@Biplab Спасибо за публикацию вашего решения; это спасло меня от головной боли! У меня была немного другая ситуация без пароля, и я обнаружил, что конструктор X509Certificate2 интерпретировал массив байтов как имя файла, когда я пытался вызвать без пароля, хотя документация указывает, что он должен принимать только массив байтов.

Я заставил его работать без пароля, вместо этого выполнив импорт.

$certbytearray=[System.Convert]::FromBase64String($OctopusParameters["mycert.Pfx"])
$mycert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$mycert.import($certbytearray)
write-host $mycert.ThumbPrint
if ($mycert.HasPrivateKey)
{ write-host "has private key"}
person housten    schedule 16.06.2020