2011-08-09 104 views
3

我正在嘗試創建一個非常簡單的WCF客戶端應用程序,它將SOAP消息發送到第三方服務。所有的信息都必須經過數字簽名。在將代碼添加到更大的應用程序之前,它確實是一個概念驗證。C#WCF客戶端錯誤「私鑰在X.509證書中不存在」

我有一個包含證書和包含私鑰的.pem文件的.cer文件。我一直在嘗試使用.cer文件加載證書,然後發出消息。但是我收到以下錯誤「私鑰在X.509證書中不存在」。

這個問題,以及其中一個問題,就是我幾乎對WCF,數字證書,私鑰以及所有那些guff幾乎一無所知。我已經做了一些閱讀,我已經谷歌搜索,直到我臉上藍色,我沒有任何地方。

如果我打開.cert文件,則會出現一段標記爲「BEGIN ENCRYPTED PRIVATE KEY」的部分,表明私鑰包含在證書中。那麼,爲什麼我會收到一條消息說它不存在?另外,如果私鑰需要添加到證書中,我該怎麼做?

這裏基本上是我在做什麼。這不是我的實際代碼,但它包括所有相關的東西:

MyWSClient c = new MyWSClient(); 
c.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"pathToFile.cer"); 
c.SomeValidCall(); 

回答

0

我的同事找到了解決辦法。我不知道爲什麼,但使用.der文件而不是.cer文件解決了這個問題。這是他用於使用證書,私鑰和根證書as.pem文件生成.der文件的命令:

openssl pkcs12 -export -in cert.pem -inkey private_key.pem -certfile root_cert.cer -out pkcs12.der 
+0

我相信這個工作原因是因爲私鑰通常不在.cer文件中。我必須使用.pfx文件來獲取過去在窗口中加載的私鑰。 – Edyn

0

你是如何創造這個證書/密鑰對?你可以將它們組合成一個PKCS#12證書使用OpenSSL:已

openssl pkcs12 -export -in yourcert.crt -inkey yourprivkey.key -out newcert.p12 

您可能需要與輸入格式播放讓它爲.pem私鑰工作。

+0

看起來pkcs是我們提供的證書類型。我假設這是因爲證書的名稱包含「_pkcs」 –

+0

您是否將證書導入Windows證書存儲?如果是這樣,你必須選中標記該鍵的方框爲可導出的,否則WCF將無法使用它。 – JohnC

+0

@JohnC請問那個複選框在哪裏?我已經啓動了certmgr.msc,但我似乎無法找到它 –