Я пытаюсь создать сценарий powershell, который будет использовать данные в XML-документе. Однако перед выполнением какой-либо работы мне нужно убедиться, что XML не был подделан, проверив подпись.
У меня есть копия открытого ключа для сертификата, используемого для подписи XML в формате PEM, но я не могу понять, как заставить powershell использовать этот сертификат.
Закрытие, которое я пришел к тому, чтобы заставить это работать, - это следующий код...
$Path = "data.xml"
$Xmldata = new-object Xml.XmlDocument
$Xmldata.PreserveWhitespace = $true
$Xmldata.Load($Path)
add-type -AssemblyName system.security
$SignedXml = New-Object System.Security.Cryptography.Xml.SignedXml -ArgumentList $Xmldata
$XmlNodeList = $Xmldata.EntitiesDescriptor.Signature
$XmlNodeList
$SignedXml.LoadXml($XmlNodeList)
$CertPath = "cert.pem"
$Check = $SignedXml.CheckSignature($CertPath, $true)
Однако, когда это запускается, я получаю следующее исключение...
Исключение, вызывающее «CheckSignature» с «2» аргументами: «SignatureDescription не может быть создан для предоставленного алгоритма подписи». В строке: 34 символа: 1 + $Check = $SignedXml.CheckSignature($CertPath, $true) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : CryptographicException
Любая помощь будет оценена по достоинству. Спасибо!