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

我正在为客户端 – 服务器应用程序实现TLS。 但是,问题是客户端和服务器都在同一台服务器上:都只和一个端口号通信。

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

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

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

这两个证书之间没有关系。 没有财产将他们联系在一起。 这两个证书由不同的实体拥有,发送,接收和处理。

要使TLS连接成功,服务器证书必须请客户端; 特别是,客户端通常期望预期的服务器名称出现在证书中的某个位置,或者在Subject Alt Name扩展名中,或者如果没有这样的扩展名,则在公用名称中。 这在RFC 2818的3.1节中有详细说明 。 这主要适用于通过https:// URL(服务器名称,因为它显示在URL中,也必须位于服务器证书中)完成连接。 值得注意的是,这场比赛是由名字 ,而不是IP地址; 如果客户机和服务器在同一台机器上,那么URL应该使用名称“localhost”(而不是IP地址127.0.0.1),“localhost”应该是服务器证书的一部分。 当然,这不是唯一的条件, 客户还应该能够相对于可信任的权威机构validation证书。


由于我在haruspicy中的能力,我可以假设你的应用程序通过公用名来定位它使用的证书,所以如果你有两个具有相同公用名的证书,客户端或服务器(或两者)可以select“错一个“。