簡體   English   中英

.Net阻止API Web服務連接

[英].Net Prevents API Web Service Connection

我用C#(。exe輸出)創建了一個應用程序,該應用程序連接到需要自簽名證書的API WebService。

為了進行調試,我已將證書添加到“受信任的根證書頒發機構”證書存儲中,並且運行良好。

從命令行控制台運行它,我也沒有收到任何錯誤,(我猜這是因為命令行也會檢查證書是否存在。)

問題是從另一個進程運行應用程序時出現的,然后是出現以下錯誤時的問題。

“基礎連接已關閉:無法為SSL / TLS安全通道建立信任關系。”

我的問題是:

  • 為什么我可以從命令行和自動化過程中毫無問題地運行它?
  • 為了使我的應用程序使用自簽名證書,我應該怎么做?

我找到了解決方案。

通過HTTPS使用Web服務時引發System.Net.WebException

您沒有提及它,但是該進程是否以其他用戶身份運行?

除非您特別選擇計算機帳戶證書存儲,否則將證書添加到個人證書存儲(您的用戶帳戶)。 當以其他用戶身份運行時,這些功能不可用。

要使證書對所有用戶可用,請將其添加到計算機證書存儲中:

  1. 啟動mmc.exe
  2. 按CTRL + M(添加/刪除管理單元)
  3. 選擇證書,單擊添加
  4. 選擇計算機帳戶,單擊完成
  5. 導入您的證書

如果願意,您還可以選擇“服務帳戶”並選擇需要訪問證書的服務。

MSDN上的這篇文章涵蓋了相同的步驟,並且更加冗長。

編輯:

將證書添加到計算機存儲需要提升的權限。 如果您不在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提示,並且證書應該安裝在計算機的根證書存儲中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM