2017-04-18 95 views
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); 
}); 

感谢。

+0

您是否将整个PEM导入商店? certmgr.msc是否将证书显示为具有关联的私钥?我认为您需要将这些文件转换为PKCS#12格式,然后才能将其导入为具有主键的证书。 IIRC Windows在运行SSL引擎时不允许将密钥存储为文件。 – Vesper

+0

是的,您必须将公用证书和关联的私钥文件合并到单个PKCS#12容器,然后将其安装到Windows证书存储区。 – Crypt32

+0

我刚刚将公钥导入证书存储区。我将尝试将公共和私有合并到PKCS12中,并尝试在证书存储中进行安装。然后尝试点击服务器。谢谢。 – sand

回答

0

PEM文件到PKCS12的转换为我工作。

相关问题