c# - 无法从 Internet Explorer 连接套接字服务器

标签 c# sockets ssl websocket tcplistener

目前,我已经使用 TCPListener 实现了一个安全服务器,并尝试通过浏览器从客户端(即 Javascript 应用程序)连接到它。我正在尝试使用 SSLStream 进行通信,并使用以下方法提供了正确的证书。

private static X509Certificate2 GetServerCert()
{
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly);
    X509Certificate2Collection cert = store.Certificates.Find(X509FindType.FindByThumbprint, "XXXXXX-THUMBPRINT_OF_CERTIFICATE_HERE-XXXXXXX", true);
    return cert[0];
}

现在,当我使用 "wss://ipaddress:port" 连接此服务器时,如果客户端从 Chrome 浏览器运行,握手和数据通信工作正常,但当我从 Internet explorer 连接时,客户端与服务器建立连接,但未使用 SSLStream 接收到任何数据,即来自 SSLStream 的零字节并再次自动与服务器断开连接。

请告诉我是否有任何特定于浏览器的设置来连接 TCPListener 以获取 wss 请求。

Internet Explorer 版本:11.0.9600.18738(不工作)

Chrome 版本:61.0.3163.100(官方构建)(64 位)(工作)

正在使用的证书已添加到受信任的证书存储区。 即使它在 Chrome 上运行,还有一个问题,它总是从客户端收到一次点击的两个请求。在第一次命中时,它获得空白标题,然后在第二次命中时自动获得完整标题。

我尝试过的:来自同一客户端应用程序的非安全请求在两种浏览器(Internet Explorer 和 Chrome)中都可以通过 TCPListener Server 正常工作。 "ws://ip地址:端口

最佳答案

我遇到了同样的问题,我尝试将指纹保存在变量中,然后使用它来获取证书,如下面的代码所示,它对我有用。

private static X509Certificate2 GetServerCert()
{
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly);
    string thumbPrint = "XXXXXX-THUMBPRINT_OF_CERTIFICATE_HERE-XXXXXXX";
    X509Certificate2Collection cert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbPrint, true);
    return cert[0];
}

关于c# - 无法从 Internet Explorer 连接套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46559179/

相关文章:

c# - 如何在本地托管.Net Bot应用程序

c# - 如何在 Xamarin.Forms 中制作平滑移动的音频 slider

python - 通过树莓派与传感器(以太网静态IP)通信

javascript - 是否可以有选择地将 Node.js 引入到用普通 PHP/JS/CSS/HTML 构建的 Web 应用程序中?

c# - 包含逻辑的静态工厂方法的单元测试

python - 警告(来自警告模块): ResourceWarning: unclosed <socket. socket object, fd=404, family=2, type=1, proto=0> using selenium

c++ - Linux/Qt - 创建 SSL 上下文时出错(错误 : 140A90C4 . ..)

ssl - 启用 SSL 的 GCP 运行状况检查

java - 排除 SSL 故障的步骤

c# - 使用 async/await 时使用未分配的局部变量