回答一个来自 r/sysadmin 的帖子但我没有足够的业力来自己回答:
您可以在 Windows 2012 R2/2016 服务器上安装主题备用名称 (SAN) 服务器证书来启用 LDAP 吗?
或者,所有 DC 都需要自己的 SSL 证书吗?
我粗略地阅读后发现,每个 DC 都需要自己的证书,并且不能只将所有 DC 名称塞入单个 SAN 证书的备用名称字段中,然后将其安装在所有 DC 上。
答案1
以前,DC 使用特殊格式的通用(跨所有 DC)自签名证书来启用 LDAPS,以便数据中心中的 APC 进行身份验证。Cisco UCS 不会接受自签名证书来创建“信任点”。为了为 UCS 启用相同的功能,确定使用的证书必须链接。测试表明,主机证书链接到的根证书是否是有效 CA 或是否是自签名 CA 并不重要。因此,我们决定创建一个新的自签名 CA,然后签署 DC LDAP 证书。这是相当标准的,但 LDAPS 跨域名访问的多个域控制器运行所必需的主题备用名称 (SAN) 的特殊要求除外。
我们尽了最大努力通过 Windows 工具生成所需的证书,但如果有可能的话,它的文档记录非常少,所以我们决定在 Linux 机器上生成它们,然后将它们复制到域中,这样会更快捷。下面的方法允许生成证书,而无需使用以下方法设置完整的 CA 结构:“迷你 CA”“openssl x509” 的功能(https://www.openssl.org/docs/apps/x509.html#SIGNING-OPTIONS)。
按照标准程序生成 CA 证书的私钥和 CA 证书本身:
openssl genrsa -des3 -out ldapCA.key 4096 openssl req -x509 -new -nodes -key ldapCA.key -days 3650 -out ldapCA.pem
为主机 LDAP 证书创建包含以下内容的证书配置文件:v3_请求支持 SAN 所需的部分:
[要求] 专有名称 = 请求专有名称 req_extensions = v3_req 提示 = 否 [请求专有名称] C=美国 ST = NC L = XXX 年份 OU = ZZZ CN = [v3_请求] 基本约束 = CA:FALSE keyUsage = 不可否认性,数字签名,密钥加密 扩展密钥使用情况 = 服务器验证 subjectAltName = @alt_names [替代名称] DNS.1 = DNS.2 = DNS.3 = DNS.4 = DNS.5 =
在使用上述请求配置多次无法生成正确的证书后,我们发现x509openssl 的选项不是从 CSR 复制扩展名(http://openssl.6102.n7.nabble.com/Unable-to-create-Version-3-certificates-with-subjectAltName-using-my-own-CA-td46753.html#a46755)
OpenSSL 有两种方法从 CSR 创建证书: ‘ca’ # 最原始最完整的方式 'x509 -req' # 一种不使用“数据库”等的简化方法。 只有“ca”才能完全使用配置文件设置,特别是 copy_extensions。“x509 -req”可以使用配置文件 扩展而已,仅此而已。 如果您想从 CSR 复制扩展,请使用“ca”。 您 *可以* 使用 'x509 -req' 并在 'x509 -req' 时间(而不是 'req -new' 时间)将包括 SAN 在内的扩展放入配置文件中, 这对于 CA 相关的扩展(例如 crldp)来说很好,但您通常希望每个证书的 SAN 有所不同。
为了解决这个问题,我们需要创建第二个仅具有扩展名的文件:<
基本约束 = CA:FALSE keyUsage = 不可否认性,数字签名,密钥加密 扩展密钥使用情况 = 服务器验证 subjectAltName = DNS:, DNS:, DNS:,DNS:,DNS:
目前还不清楚同样的数据需要必须同时存在于 CSR 和扩展文件中,但两者均可使用。此时,我们可以使用 CA、CA 密钥、证书请求文件和扩展文件生成主机证书,然后验证生成的证书:
openssl x509 -days 1460 -req -CA ldapCA.pem -CAkey ldapCA.key -CAcreateserial -in ldapSAN.csr -out ldapSAN.pem -extfile ext.txt openssl x509 -文本-noout-in ldapSAN.pem
验证的输出应显示它是一个 v3 证书,由 CA 签名,并且应显示填充了每个 DC 的 FQDN 的 SAN 部分:
证书: 数据: 版本:3(0x2) 序列号: () 签名算法:sha1WithRSAEncryption 发行人:C=、ST=、L=、O=、OU=、CN=/emailAddress= 有效性 不早于:2015 年 3 月 5 日 16:36:10 GMT 不晚于:2019 年 3 月 4 日 16:36:10 GMT 主题:C=、ST=、L=、O=、OU=、CN= 主题公钥信息: [...] X509v3 扩展: X509v3基本约束: CA:假 X509v3 密钥用法: 数字签名、不可否认性、密钥加密 X509v3 扩展密钥用法: TLS Web 服务器身份验证 X509v3 主体备用名称: DNS:, DNS:, DNS:, DNS:, DNS: 签名算法:sha1WithRSAEncryption [...]
为了导入证书并在 DC 上使用它们,我们必须以 pkcs12(pfx)格式导出带有私钥的主机证书:
openssl pkcs12 -export -out ldapSAN.pfx -inkey ldapSAN.key -in ldapSAN.pem -certfile ldapCA.pem
最后,我们安装 CA 证书的公共版本,在本例中ldapCA证书, 在里面受信任的根证书颁发机构商店的机器帐户每个域控制器的。这可以通过远程管理工具、在每台服务器上本地或通过 GPO 完成。然后,我们在每台服务器上安装主机证书和私钥。这必须可以在本地完成,因为无法远程导入带有私钥信息的 pfx:
CERTUTIL -f -p <密码> -importpfx ldapSAN.pfx
此时,DC 可能会自动获取证书(http://support.microsoft.com/kb/321051):
最后,如果 Windows Server 2008 或更高版本的域控制器在其存储中发现多个证书,则 自动选择到期日期最远的证书。然后,如果您当前的证书 接近到期日期时,你可以将替换证书放入存储中,AD DS 会自动切换 使用它。
在我们的例子中,由于以前的证书的有效期晚于新的证书,因此我们必须在每个域控制器使用新证书之前删除旧证书。您可以使用以下命令验证 LDAP 服务正在使用的证书(NAGIOS 也对此进行了检查):
openssl s_client -connect <DC 的 FQDN>:636 -showcerts
输出将包含与我们上面进行的证书验证类似的信息。
此时,您可以向任何需要公共证书的客户端提供这些证书。有些客户端可能只需要 CA,有些客户端可能只需要主机证书,有些客户端可能需要包含整个证书链的单个文件。
UCS 和 APC 都已由 SR 重新配置,以连接新的证书。
雙重