0
我擁有pem格式的證書。 2個文件,RSA Public和RSA私鑰。 我必須使用這些來在PowerShell腳本中向服務器發出https請求。在powershell https請求中使用pem證書和密鑰進行身份驗證
我嘗試使用X509證書證書存儲添加證書。但我不知道如何添加客戶端密鑰證書(RSA私鑰)。 我試着只用證書,但我得到這個錯誤:
Exception Message: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure c
hannel。
如何使用PowerShell使用客戶端證書和密鑰請求?
我寫了PowerShell腳本:
$method = "GET"
# Create a dictionary object that allows header storage in Rest call
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("X-Qlik-Xrfkey",$xrfKey)
$headers.Add("X-Qlik-User", "***")
#Get a selection object for all inactive users
$path = "/qrs/app?xrfkey=$xrfKey"
$theCommand = $senseServerHostName + "/qrs" + $path
$ns = "System.Security.Cryptography.X509Certificates"
$store = New-Object "$ns.X509Store"("My","CurrentUser")
#$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "CurrentUser")
$store.Open("ReadOnly")
#$certs = $store.Certificates.Find("FindByExtension", $certExtension, $false)
#"$store.Certificates"
ForEach($cert in $store.Certificates)
{
$certToUse = $cert
}
"$certToUse"
$response = Invoke-RestMethod $theCommand -Headers $headers -Method $method -Certificate $certToUse
雖然我是能夠使使用Node.js的 節點代碼請求:
var https = require('https');
var fs = require('fs');
var options = {
rejectUnauthorized: false,
hostname: '****',
method: 'GET',
path: '/qrs/app?xrfkey=****',
headers: {
//'Accept': 'application/json',
'x-qlik-xrfkey' : '****',
'X-Qlik-User' : '****'
},
key: fs.readFileSync("C:\\client_key.pem"),
cert: fs.readFileSync("C:\\client.pem")
};
https.get(options, function(res) {
console.log("Got response: " + res.statusCode);
res.on("data", function(chunk) {
console.log("BODY: " + chunk);
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
感謝。
您是否將整個PEM導入商店? certmgr.msc是否將證書顯示爲具有關聯的私鑰?我認爲您需要將這些文件轉換爲PKCS#12格式,然後才能將其導入爲具有主鍵的證書。 IIRC Windows在運行SSL引擎時不允許將密鑰存儲爲文件。 – Vesper
是的,您必須將公用證書和關聯的私鑰文件合併到單個PKCS#12容器,然後將其安裝到Windows證書存儲區。 – Crypt32
我剛剛將公鑰導入證書存儲區。我將嘗試將公共和私有合併到PKCS12中,並嘗試在證書存儲中進行安裝。然後嘗試點擊服務器。謝謝。 – sand