2013-07-08 24 views
3

我試圖發送一個請求有:什麼可用於SetClientCertificate?

ActiveXObject("WinHttp.WinHttpRequest.5.1") 

然而,這需要客戶端證書這麼做(我們已經提供)。

在PHP捲曲已經測試我可以這樣做:

curl_setopt($SOAP, CURLOPT_SSLCERT,$filepathtocertificate); 

工作正常。但是我必須使用IIS運行ASP(JavaScript的),並指向腳本與運行的計算機的證書存儲區:

SetClientCertificate("LOCAL_MACHINE\\Personal\\Certificate subject"); 

我們的實際部署。 MS文檔(http://msdn.microsoft.com/en-us/library/windows/desktop/aa384055(v=vs.85).aspx)表明上面的路徑必須說明證書的「主體」,但是證書似乎有幾個主題,並且幾個或所有這些主體似乎都沒有結合,並且我堅持使用以下錯誤甚至發送請求之前:

WinHttp.WinHttpRequest error '80072f0c' 

A certificate is required to complete client authentication 

展望證書存儲在同一文件夾中顯示使用其他腳本,他們肯定是有,但有喜歡的科目:

C=US, O=Organisation NAme, OU="Another Organisation Name, Inc.", CN=Organisation Name Root 

或同級。

有關在證書存儲中選擇和發送證書需要提供什麼參數SetClientCertificate的任何建議將不勝感激。

回答

2

我在解決這個問題時遇到了很多麻煩 - 使用來自腳本語言的winhttp 5.1在發送之前設置客戶端證書。

我曾使用mmc與證書管理單元導入CURRENT_USER \ Personal中的證書 - 但Winhttp SetClientCertificate似乎沒有做任何事情,我也無法獲取任何錯誤代碼或消息,因此它是一個反覆試驗和錯誤的情況 - SetClientCertificate字符串應該是「Location \ store \ subject」,例如「CURRENT_USER \ Personal \ My Certificate」(或者\ \如果您的語言要求被轉義) - 最後一部分是'主題',這不太清楚,應該是。在MMC下,主題被分解成許多元素。

我最終通過刪除位置和商店來獲得它 - 它們是默認設置,所以我可能很幸運 - 並且只提供了主題字段 - 我用於主題字段的值是行「CN =「在主題下(當證書在mmc下打開時) - 但這(可能是巧合)也是主mmc證書列表中」頒發給「列中的值。在我的情況下,它的工作原理 - 顯然如果有這兩個值不同的證書,那麼你需要嘗試每個值。

希望這有助於如果有人同樣卡住。

0

這是一個非常古老的問題,但我今天必須找到答案。 @JSL上面提供的答案幫助了我。如果你只提供證書主題名稱,那麼它的工作原理!所以很明顯,指定完整路徑的方式存在錯誤。

我得到了Windows 7的正確信息從這個鏈接https://msdn.microsoft.com/en-us/library/windows/desktop/aa384076(v=vs.85).aspx

這裏是VBA腳本的作品。

Dim objHttp As New WinHttp.WinHttpRequest 
objHttp.Open "GET", url, False 
objHttp.SetClientCertificate "CURRENT_USER\My\TestCert" 
objHttp.send 

有效的位置是LOCAL_MACHINE和CURRENT_USER和 有效的商店名稱是 「我的」, 「根」 和 「TrustedPeople」。 請記住在C++,C#等中避開反斜槓。