[英].Net Prevents API Web Service Connection
我用C#(。exe輸出)創建了一個應用程序,該應用程序連接到需要自簽名證書的API WebService。
為了進行調試,我已將證書添加到“受信任的根證書頒發機構”證書存儲中,並且運行良好。
從命令行控制台運行它,我也沒有收到任何錯誤,(我猜這是因為命令行也會檢查證書是否存在。)
問題是從另一個進程運行應用程序時出現的,然后是出現以下錯誤時的問題。
“基礎連接已關閉:無法為SSL / TLS安全通道建立信任關系。”
我的問題是:
我找到了解決方案。
您沒有提及它,但是該進程是否以其他用戶身份運行?
除非您特別選擇計算機帳戶證書存儲,否則將證書添加到個人證書存儲(您的用戶帳戶)。 當以其他用戶身份運行時,這些功能不可用。
要使證書對所有用戶可用,請將其添加到計算機證書存儲中:
如果願意,您還可以選擇“服務帳戶”並選擇需要訪問證書的服務。
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.