如何自动安装来自 CA 的证书?

How can I automatically install certificates from a CA?

我们有多个服务器和一个负载平衡器。首次配置服务器时,会创建一个自签名证书。然后服务器将其固定 IP 注册到负载均衡器。

当我们自己的 Android 应用程序想要访问服务器时,负载均衡器会告诉它 IP。由于我们可以通过将证书安装在 SSLContext 中来信任我们自己的证书,因此 Android 应用程序可以使用 SSL 与服务器通信。

问题:我们想扩展系统,以便任意浏览器可以访问我们的服务器,但这些浏览器不信任我们的自签名证书,并向用户显示丑陋的消息。

因此,我们必须使用来自可信 CA 的证书。但这里有一个问题,负载均衡器使用 IP,而不是域(可以更改)。如果我们想使用基于域的证书,我们必须在每台服务器上手动安装证书,and/or 我们必须为域配置 DNS。

How are ssl certificates verified? 解释了认证过程中的步骤,但是我没有看清楚的是浏览器如何知道它联系的IP属于给定的域?它看反向条目吗?我能否以某种方式欺骗此系统以绕过手动安装 and/or 配置 DNS?此外,我认为即使是域证书通常也会颁发给 IP,因此我必须为每台服务器重新颁发它。有人能把这些点联系起来吗?像我们目前所做的那样自动配置服务器的最佳方法是什么,但使用来自 CA 的证书而不是自签名证书?有人知道我可以使用 API 的 CA 吗?

the browser know that the IP it contacts belongs to a given domain?

事实并非如此。一般的名称验证机制是:证书中的名称必须与地址栏中的名称匹配。

如果客户端通过名称连接到远程服务器,则响应中的证书必须在主题字段或主题备用名称证书扩展中包含该名称。

如果客户端通过 IP 连接到远程服务器,则响应中的证书必须在主题字段或主题备用名称扩展中包含该 IP。

IP 的问题是商业(公共信任的)CA 不会向您颁发 IP 地址证书。仅限合格域名。