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

self-signed certificate SANs ignored in wss connection

可以通过 IP 和 DNS 访问 Web 服务。
使用以下命令创建一个包含 DNS 作为通用名称、DNS 和 IP 作为 subjectAlternativeName 的自签名证书

openssl req \
  -x509 \
  -nodes \
  -subj "/O=www.example.com/CN=${domain_name}" \
  -addext "subjectAltName=DNS:${domain_name},IP:${ip_addr}" \
  -newkey rsa:4096 \
  -keyout /path/to/key.pem \
  -out /path/to/cert.pem \
  -addext "extendedKeyUsage = serverAuth" \
  -days 365

通过IP地址打开网页并接受浏览器警告有效
该页面启动新的 WSS 连接到 DNS,但由于证书无效而失败。

我应该如何设置我的证书,以便浏览器在启动 wss 连接时信任 IP 和域名

在接受关于不受信任证书的安全警告时添加安全例外不是针对证书,而是针对来自URL的证书和域和端口的组合。由于 HTML 是通过 IP 地址访问的,而 websocket 是通过主机名访问的,因此为第一个添加的例外不会涵盖第二个。

最好的方法是首先不要接受安全警告,而是在浏览器中将证书添加为受信任。在这种情况下,证书中给出的所有 IP 和域都将信任该证书。