Автоматически подписывать скрипт powershell с помощью Get-PfxCertificate - PullRequest
1 голос
/ 23 февраля 2010

Я должен подписать удаленные сценарии сертификатом с удаленного компьютера, с которого у меня есть файл .pfx.

Я хотел бы автоматизировать создание сценариев, предоставляя пароль для Get-PfxCertificate программным способом.

Так что вопрос:

Можно ли каким-то образом программно ввести требуемый пароль для

Get-PfxCertificate?

Ответы [ 3 ]

5 голосов
/ 10 февраля 2011
$CertPath = "my.pfx"
$CertPass = "mypw"
$Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertPath, $CertPass)
Set-AuthenticodeSignature -Certificate $Cert -TimeStampServer http://timestamp.verisign.com/scripts/timstamp.dll -FilePath $OutputFilename

Убедитесь, что у вас есть соответствующие разрешения, иначе вы не сможете создать экземпляр объекта X509Certificate2.

1 голос
/ 01 июня 2014

Еще один способ сделать это - загрузить сертификат прямо из хранилища сертификатов с помощью провайдеров PS. Используйте Get-PSProviders для определения доступных PSProviders на вашем компьютере. После того, как у вас загружен поставщик сертификатов, вы можете получить сертификат с помощью Get-ChildItem

Запуск certmgr.msc из запуска для запуска хранилища сертификатов
Предполагая, что ваш сертификат хранится в папке Личная в вашем хранилище сертификатов
и в нем установлено " Название компании " в свойстве субъекта сертификата, и в нем есть только сертификат папка с название компании в теме - вы можете получить сертификат вот так

$my_cert = Get-ChildItem cert:\CurrentUser\My | ? {$_.Subject -match "Company Name"}

$ my_cert будет вашим объектом сертификата, который вы можете напрямую передать Set-AuthenticodeSignature cmdlet

Set-AuthenticodeSignature -Certificate $my_cert -FilePath fqn_to_dll.dll -Timestampserver "http://timestampurl"

после подписания, вы можете получить статус подписи, запросив у свойства Status значение «Действительный» или не такой как

$result = Set-AuthenticodeSignature -Certificate $my_cert -FilePath fqn_to_dll.dll -Timestampserver "http://timestampurl" | Select Status
if(-Not ($result -eq "Valid")){
    Write-Output "Error Signing file: Status: $($result.Status)"    
}
1 голос
/ 25 февраля 2010

Я немного проверил это и не смог найти правильный способ предоставить пароль программно. Я подозреваю, что так должно быть по соображениям безопасности. Либо тот, либо команда разработчиков PowerShell просто взорвали его, не включив параметр Credential для этого командлета. Единственный другой вариант, который я могу придумать, - это использовать что-то вроде SendKeys для отправки отдельных нажатий клавиш пароля на консоль PowerShell в нужное время с помощью фонового задания (блеф, просто немного вырвало мне в рот). : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...