簡體   English   中英

自簽名證書的 C# HttpListener (netsh) 問題

[英]C# HttpListener (netsh) problems with SelfSigned Certificate

我的 HttpListener 有一些問題。 我已經搜索並閱讀了一些討論。 例如: 支持 HTTPS 的 Httplistener

首先,我嘗試描述我的場景:我想創建一個支持 SSL/HTTPS 的 HTTP 偵聽器。 那是主要目標。 我使用 OpenSSL 創建自己的 CA 並創建了自己的服務器證書。 我現在有:

  • 我的密鑰
  • myCapem
  • myCa.srl
  • 我的服務器密鑰
  • 我的服務器.csr
  • 我的服務器.crt

我將 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.

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