当我使用 SRV DNS 记录时,我应该在 TLS 证书中输入什么名称?例如,如果我在两台服务器(klas1 和 klas2)上设置 slapd,并且我定义了这些 DNS 记录(使用绑定区域文件样式符号):
_ldap._tcp.example.com. IN SRV 10 0 389 klas1.example.com.
_ldap._tcp.example.com. IN SRV 20 0 389 klas2.example.com.
klas1.example.com. A 192.168.0.1
klas2.example.com. A 192.168.0.2
我希望我的客户端配置为连接到 ldap://example.com/。但是,当我在服务器上生成 TLS 证书时,我是否应该使用名称“example.com”生成它们,还是使用名称“klas1.example.com”生成它们,或者我是否需要两者?
答案1
证书必须与主机名匹配,即A
服务器的相应记录。您可以拥有单独的klas1.example.com
&klas2.example.com
证书或共享通配符*.example.com
证书,但example.com
不会匹配。
这些SRV
记录不需要证书,因为它们仅在 DNS 级别用于服务发现。
答案2
您只需要您的主机条目(A 记录),服务记录用于发现而不是连接本身。
答案3
证书通用名称或 SubjectAltName.DNS 应与 LDAP uri 中最初给出的名称相匹配。附录 B.3 中的 RFC6125(https://www.rfc-editor.org/rfc/rfc6125#appendix-B.3) 说:
3.6. 服务器身份检查
为了防止中间人攻击,客户端必须
根据服务器证书消息中显示的服务器身份检查其对服务器主机名的理解。匹配按照以下规则进行:
o 客户端必须使用用于打开 LDAP 连接的服务器主机名作为与服务器证书中表示的服务器名称进行比较的值。客户端不得使用服务器的规范 DNS 名称或任何其他派生形式的名称。
请注意,同样的逻辑也适用于使用 SRV 记录的其他协议,例如 SIP。从安全角度来看,这在某种程度上是合理的。如果仅检查主机,则通过将连接转移到主机名与最初查询的域名无关的节点,很容易进行中间人攻击。