如何生成不会引发 SSL_ERROR_BAD_CERT_DOMAIN 的自签名证书?

如何生成不会引发 SSL_ERROR_BAD_CERT_DOMAIN 的自签名证书?

我需要为我的应用程序生成一个自签名证书,并且我希望如果已将自生成的根证书手动添加到 Web 浏览器,则能够使其有效。

问题是,我的应用程序将通过客户端分配给运行此应用程序的服务器的任何 IP 来访问(如果客户端使用 DNS,则可能是主机名)

我尝试在 CN 中使用 *,但是不起作用。

额外信息:应用程序和服务器很可能没有连接到互联网,IP 和主机名(如果有)无法被知道,因为这是由客户端在最后配置的。

答案1

不可以,单个证书不能对任意站点有效。此规则适用于自签名证书和普通证书。

考虑一下如果网络浏览器做过允许这样做:如果用户接受了您的证书(因为他们想要连接到您的应用程序),那么您或任何其他人都可以使用该证书冒充地球上的任何其他站点,而您的用户将无法分辨出其中的区别。

您提出的第二个建议是使用单个自签名根证书来动态签署各个证书,这也会导致同样严重的安全漏洞。由于根证书的私钥必须作为软件的一部分提供,因此它不能被视为安全的。

(为了完整性:有以下缓解措施:证书透明度,您可以将浏览器配置为仅接受特定站点的特定证书;这甚至可能是默认设置,我不确定 - 但我不认为这些细节会显着改变底层分析,因为它们是纵深防御措施,而不是唯一的保护层。)

反而,你的应用程序应该自己生成一个自签名证书,在安装时或用户首次连接时。这是基于 Web 的管理控制台的常见做法。 您还应该为用户提供提供正确签名的证书的选项。

如果您需要帮助实现这一点,您应该在 Stack Overflow 上询问。

相关内容