簡體   English   中英

我在 443 以外的任何端口上收到 CommunicationException

[英]I receive a CommunicationException on any port other than 443

我有一個標准的 n 層應用程序 (.Net 4.7.2),它帶有一個控制台服務器和一個 WinForms 應用程序,它們都在同一台機器上運行。 客戶端和服務器通過 WCF 進行通信。

如果我在地址綁定中使用 443 以外的任何端口,當我嘗試與服務器通信時,客戶端上會出現CommunicationException 不指定端口或明確指定 443 可以正常工作。

錯誤信息是;

https://localhost:44333/SecurityTokenService/issue/wstrust/mixed/anonymous HTTP 請求時出錯。 這可能是由於在 HTTPS 案例中未使用 HTTP.SYS 正確配置服務器證書。 這也可能是由於客戶端和服務器之間的安全綁定不匹配造成的。

這是我的客戶端綁定供參考

<endpoint 
    address="https://localhost:44333/SecurityTokenService/issue/wstrust/mixed/anonymous"
    binding="customBinding" 
    bindingConfiguration="MySecurityTokenEndpointBinding" 
    contract="System.ServiceModel.Security.IWSTrustChannelContract" 
    name="SecretTokenAuthenticationEndPoint" />

更新:我自己繼續調查該問題並啟用 WCF 跟蹤。 我可以從跟蹤日志中看到警告“安全協議無法保護傳出消息”

在此處輸入圖像描述

確保使用正確的方式調用 wcf 服務,例如添加服務引用、通道工廠等。閱讀您的問題后,我認為很有可能是錯誤消息:'這也可能是由不匹配引起的客戶端和服務器之間的安全綁定。

您可以使用以下代碼指定 TLS 版本:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13;

TLS1.3是最新的TLS標准協議,速度更快,安全性更高。 以下是參考: 使用 .NET 框架的傳輸層安全 (TLS) 最佳實踐

我的解決方案是將 SSL 證書綁定到我的服務正在暴露的 IP 地址和端口。 我在命令提示符下使用了以下命令;

netsh http 添加 sslcert ipport={ipAddress}:{port} certhash={CertificateThumbprint} appid={appId}

需要注意的幾點

  1. 如果上述命令失敗; 確保您導入了私鑰,而不僅僅是公共證書
  2. 我不知道 appId 是否是任意 Guid; 我使用了我的應用程序 shell 項目(控制台應用程序)中的 Guid; 將您的應用程序暴露給“com”的 Guid

希望這可以幫助將來的人

暫無
暫無

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

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