服务器和客户端可以使用具有相同 CN 的证书吗?

服务器和客户端可以使用具有相同 CN 的证书吗?

我正在为客户端-服务器应用程序实现 TLS。但问题是客户端和服务器都在同一台服务器上:两者仅使用端口号进行通信。

那么代理和服务器的通用名称 (CN) 应该是什么?如果我使用系统 IP 以外的其他名称,我会收到“不受信任的证书警告”的警告消息。如果我使用相同的 CN 名称,应用程序将失败。

答案1

TLS,客户端证书和服务器证书存在于完全不同的世界中:

  • 服务器证书由客户端验证。
  • 客户端证书(当服务器实际要求提供客户端证书时)由服务器验证。

这两个证书之间没有任何关系。没有任何属性将它们联系在一起。这两个证书由不同的实体拥有、发送、接收和处理。

为了使 TLS 连接成功,服务器证书必须让客户端满意;具体来说,客户端通常期望目标服务器名称出现在证书中的某个位置,要么在Subject Alt Name扩展中,要么在通用名称中(如果没有这样的扩展)。这在RFC 2818,第 3.1 节。这主要适用于通过 URL 进行连接的情况https://(URL 中显示的服务器名称也必须包含在服务器证书中)。值得注意的是,此匹配是通过姓名,而不是通过 IP 地址;如果客户端和服务器在同一台机器上,则 URL 应使用名称“localhost”(而不是 IP 地址 127.0.0.1),并且“localhost”应是服务器证书的一部分。当然,这不是唯一条件;客户端还应该能够相对于受信任的机构验证证书。


由于我的占卜能力,我可以假设您的应用程序通过通用名称来定位它使用的证书,因此如果您有两个具有相同通用名称的证书,则客户端或服务器(或两者)可能会选择“错误的一个”。

相关内容