2013-10-16 79 views
0

我已經建立在C#(.EXE輸出),其連接到需要自簽名證書的API的WebService的應用程序。淨防止API的Web服務連接

對於調試,我有證書添加到受信任的根證書頒發機構的證書存儲,並且已經完美的工作。

從命令行控制檯運行它,我沒有得到任何錯誤都不是,(我想這是因爲命令行還檢查證書是否在那裏。)

的問題時,該應用程序是從銀行經營來另一個過程,然後是當我得到以下錯誤。

「基礎連接已關閉:無法爲SSL/TLS安全通道的信任關係。」

我的問題是:

  • 爲什麼我運行它,而不從駕駛室管理線和一個自動化的過程不要什麼問題?
  • 我應該怎麼做才能讓我的應用程序使用自簽名證書?

我找到了解決方案。

System.Net.WebException thrown when consuming a web service over HTTPS

+0

你能告訴我們一些代碼嗎? –

回答

0

你不提它,但在運行過程中的其他用戶?

除非您特別選擇計算機帳戶證書存儲區中,您將證書添加到您的個人證書存儲區(用戶帳戶)。這些在作爲另一個用戶運行時不可用。

爲了讓所有用戶可以使用的證書,將其添加到計算機證書存儲:

  1. 開始MMC.EXE
  2. 按CTRL + M(添加/刪除管理單元)
  3. 選擇證書,點擊添加
  4. 選擇計算機帳戶,單擊Finish
  5. 導入證書

您也可以選擇服務帳戶,並根據您的需要選擇需要訪問證書的服務。 MSDN上

This文章涵蓋了相同的步驟,是一個有點冗長。

編輯:

添加到機器存儲中的證書需要提升的權限。如果你沒有將它捆綁到MSI安裝程序中,我建議你編寫一個單獨的InstallCertificate.exe(控制檯或Windows應用程序)來執行安裝。

在Visual Studio:

創建一個新的控制檯/ Windows應用程序,並添加一個應用程序清單文件(添加項目/ Ctrl + Shift + A)。在剛剛添加的app.manifest文件,更改此行

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

這個

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

將此代碼放在Program.cs中(這推到生產環境之前添加一些日誌和錯誤處理!):

using System; 
using System.Security.Cryptography.X509Certificates; 

namespace InstallCertificate 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string cerFileName = args[0]; 
      X509Certificate2 certificate = new X509Certificate2(cerFileName); 
      X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
      store.Open(OpenFlags.ReadWrite); 
      store.Add(certificate); 
      store.Close(); 
     } 
    } 
} 

運行該應用程序。您應該獲得UAC提示,並且證書應該安裝在您的計算機的根證書存儲區中。

+0

是的!我認爲你是對的,因爲運行我的應用程序的過程被記錄爲另一個用戶。那麼,是否有可能使用.Net將您的解決方案編程到我的代碼? – kmxillo

+1

我用代碼示例更新了我的答案。希望這可以幫助! – EventHorizon