[英]C# HttpListener (netsh) problems with SelfSigned Certificate
我的 HttpListener 有一些問題。 我已經搜索並閱讀了一些討論。 例如: 支持 HTTPS 的 Httplistener
首先,我嘗試描述我的場景:我想創建一個支持 SSL/HTTPS 的 HTTP 偵聽器。 那是主要目標。 我使用 OpenSSL 創建自己的 CA 並創建了自己的服務器證書。 我現在有:
我將 myCa.pem 和 myServer.crt 證書安裝到我的本地計算機。 我將 CA 移動到受信任的存儲中,並將服務器證書移動到“自己的證書”中
然后我獲取了我的服務器證書的指紋(certHash)。 我使用管理員權限創建了 netsh 條目
netsh http add sslcert ipport=0.0.0.0:9649 appid= '{0a5ce-569a-4dc6-8ed7-9ef91241dec3}' certhash=4F556BDC3F97B31D555266DA74F573777FCCAA55
我的 C# 實現相對簡單:
this.Listener = new HttpListener();
this.Listener.Prefixes.Add("https://*:9649");
this.Listener.Start();
this.Listener.BeginGetContext(new AsyncCallback(ProcessClient), this.Listener);
//Process an incoming connection
private void ProcessClient(IAsyncResult result)
{
var listener = (HttpListener)result.AsyncState;
var clientContext = listener.EndGetContext(result);
}
當我在我的 TcpStack 中實現 SSL 時,我使用了 SSL-Stream,在那里我可以使用 ValidationCallback 驗證證書。 我不確定這是否可行。 我試過ServicePointManager.ServerCertificateValidationCallback += ValidateCert;
但我從來沒有在那里達到我的斷點。
現在解決問題:
當我嘗試連接我自己的 HttpClient(.NET HttpClient 類)時,SSL 層上總是出現RemoteNameMismatch
錯誤。 我沒有命中ProcessClient
方法中的斷點。 我嘗試不使用特定證書(自動檢測),並且還嘗試向客戶端建議相同的證書(具有相同的哈希)。 在這兩種情況下,我都遇到了同樣的錯誤。 當我在客戶端和服務器端使用相同的證書時,我不明白為什么會出現任何錯誤。 我一直認為 netsh 會比較證書。
當我嘗試與 Postman 連接時,我點擊了ProcessClient
function。 但是 Postman 收到一個錯誤,他無法檢查證書。 但我認為問題在於我的證書不是官方證書。 但是數據交換正在工作。
另一點是:我還想在具有 unix 操作系統的容器中推出我的應用程序。 .NET60
專為跨平台而設計。 但是 netsh 的 unix 掛件是什么? 是否可以在 unix 上使用 https 運行我的監聽器? 應用程序和證書之間的映射如何工作? 也許我必須改變我的技術? 替代HttpListener
? 主要是我不想使用第三方的東西。
更新解決方案:就像評論中的人所說的那樣。 FDQN 是問題所在。 簡單來說:我創建了自己的 CA,然后針對 CA 創建了服務器證書簽名請求。 在服務器證書中,CN 與我的個人計算機的 DNS 匹配。 與我的 HTTP 偵聽器的連接現在正在工作。 謝謝您的幫助!
感謝您的閱讀和幫助。
問候
我使用這篇文章將問題標記為已解決。 我沒有找到任何其他可能性。 解決方案在更新的問題中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.