Powershell - 使用导出的私钥和算法 RSA-SHA512 签署字符串

问题描述 投票:0回答:1

我正在尝试使用私钥(来自 pfx 证书)和算法 RSA-SHA512 对字符串进行签名 在 Powershell 中。 这是我现在拥有的:

$x_request_id = New-Guid
$x_request_id_Final = "x-request-id: $x_request_id"

$string = ""
$bytes = [System.Text.Encoding]::UTF8.GetBytes($string)
$sha512 = [System.Security.Cryptography.SHA512]::Create()
$hash = $sha512.ComputeHash($bytes)
$Digest = [System.Convert]::ToBase64String($hash)
$Digest_Final = "digest: SHA512=$Digest"

$SignString = $Digest_Final + "`n" + $x_request_id_Final

我的输出如下所示:

digest: SHA512=z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==
x-request-id: f1856125-24bd-47c1-a1af-1ab6bd507634

到目前为止一切都还好。 现在我有一个从 PFX 证书中提取的私钥,我们将其称为“Certificate.pfx” 它的内容看起来像这样:

-----BEGIN PRIVATE KEY-----
Base64ContentHere
-----END PRIVATE KEY-----

有谁知道有没有在 powershell 中使用 RSA-SHA512 算法用私钥对字符串进行签名的经验?

powershell
1个回答
0
投票

所以我用我必须构建的解决方法解决了我的问题(解决了我的问题) 我首先必须找到一个支持 dgst -sha512 的旧 openssql。 在互联网上查找,我发现了以下 Windows exe 文件:

适用于 Windows 的 openssl

下载文件后,我将其放入服务器上的文件夹中并执行以下操作:

$x_request_id = New-Guid
$x_request_id_Final = "x-request-id: $x_request_id"

$string = <String>
$bytes = [System.Text.Encoding]::UTF8.GetBytes($string)
$sha512 = [System.Security.Cryptography.SHA512]::Create()
$hash = $sha512.ComputeHash($bytes)
$Digest = [System.Convert]::ToBase64String($hash)
$Digest_Final = "digest: SHA512=$Digest"

[System.IO.File]::WriteAllText('c:\temp\data.txt', "$Digest_Final`n$x_request_id_Final")
& "c:\temp\openssl-0.9.8k_X64\bin\openssl.exe" dgst -sha512 -sign "c:\temp\privatekey.pem" -out "c:\temp\signature.bin" "c:\temp\data.txt"
& "c:\temp\openssl-0.9.8k_X64\bin\openssl.exe" base64 -in "c:\temp\signature.bin" -out "c:\temp\signature_base64.txt"
$Final = (Get-Content "c:\temp\signature_base64.txt") -replace "`r`n",""

$CERT = Get-ChildItem -Path Cert:\LocalMachine\my\<ID>
$headers = New-Object "System.Collections.Generic.Dictionary[[string],[string]]"
$headers.Add(<Add headers>)
etc...

Invoke-WebRequest "<URL>" -Method "Post/Get" -Headers $headers -CertificateThumbprint $CERT.Thumbprint

这就是我通过一些解决方法解决问题的方法,我确信有更好的方法来做到这一点,但由于我时间有限,所以我没有太多时间来找到合适的模块。

我希望它能帮助该功能中的某人。

© www.soinside.com 2019 - 2024. All rights reserved.