如何为本地托管的 wss:// 服务器创建自签名证书

Posted

技术标签:

【中文标题】如何为本地托管的 wss:// 服务器创建自签名证书【英文标题】:How to create a self-signed cert for a local hosted wss:// server 【发布时间】:2021-05-19 01:11:15 【问题描述】:

我正在尝试创建一个 Windows 服务,该服务打开一个安全的 Web 套接字并侦听某个端口 (wss://localhost:1234) 上的连接。示例代码包括引用供服务器使用的证书:

var serverCertificate = new X509Certificate2(certificatePath, "mypassword");

这很好用。

当客户端尝试连接时会出现问题:

using (SslStream n = new SslStream(client.TcpClientInstance.GetStream()))

   n.AuthenticateAsServer(serverCertificate, clientCertificateRequired: false, enabledSslProtocols: System.Security.Authentication.SslProtocols.Tls12, checkCertificateRevocation: false);

此行错误并出现通用“对 SSPI 的调用失败,请参阅内部异常”、“InnerException = “处理证书时发生未知错误””:

这发生在受信任的根证书颁发机构中注册的自签名证书。

有趣的是,如果我使用由 Visual Studio 生成的通用 localhost 证书,它就可以工作。

欢迎任何想法。

TIA

【问题讨论】:

【参考方案1】:

可能会解决您的问题。

创建一个像 sub-domain.domain.com 这样的子域(使用您的实际域) A 记录到 127.0.0.1 为 sub-domain.domain.com 申请 SSL 证书

当您打开与 sub-domain.domain.com 的连接时,它将是有效的,并且应该解析为 127.0.0.1,这是您的“服务器”正在侦听的位置。

【讨论】:

以上是关于如何为本地托管的 wss:// 服务器创建自签名证书的主要内容,如果未能解决你的问题,请参考以下文章

如何为自托管 WCF 服务启用跨域调用

如何为 localhost 创建自签名证书?

如何为测试目的创建自签名 SSL 证书? [关闭]

wss 连接中忽略的自签名证书 SAN

如何为使用 OpenSSL 生成的证书提供多行证书名称 (CN)

如何为托管在 Azure 上的 Web 应用程序和托管在窗口的 IIS 服务器上的 Web 应用程序使用相同的自定义域?