管理“软件定义的网络”的证书
适用范围:Azure Stack HCI 版本 22H2、Windows Server 2022、Windows Server 2019、Windows Server 2016
本文介绍在部署软件定义的网络 (SDN) 以及使用 System Center Virtual Machine Manager (SCVMM) 作为 SDN 管理客户端时,如何管理用于网络控制器北向和南向通信的证书。
注意
有关网络控制器的概述信息,请参阅网络控制器。
如果你不使用 Kerberos 来保护网络控制器通信,则可以使用 X.509 证书进行身份验证、授权和加密。
Windows Server 2019 和 2016 Datacenter 中的 SDN 同时支持自签名的和证书颁发机构 (CA) 签名的 X.509 证书。 本主题提供了有关创建这些证书并将其应用于安全的网络控制器北行通信(与管理客户端)通道和南行通信(与网络设备,例如软件负载均衡器 (SLB))通道的分步说明。
使用基于证书的身份验证时,必须在网络控制器节点上注册一个证书,可通过以下方式使用该证书。
- 使用安全套接字层 (SSL) 加密网络控制器节点与管理客户端(例如 System Center Virtual Machine Manager)之间的北行通信。
- 网络控制器节点与南行设备和服务(例如 Hyper-V 主机和软件负载均衡器 (SLB))之间的身份验证。
创建并注册 X.509 证书
可以创建并注册自签名证书或 CA 颁发的证书。
注意
使用 SCVMM 部署网络控制器时,必须在配置网络控制器服务模板期间指定用于加密北向通信的 X.509 证书。
证书配置必须包含以下值。
- RestEndPoint 文本框的值必须是网络控制器完全限定的域名 (FQDN) 或 IP 地址。
- RestEndPoint 值必须与 X.509 证书的使用者名称(公用名、CN)匹配。
创建自签名的 X.509 证书
在网络控制器的单节点和多节点部署中,可以按照以下步骤创建自签名的 X.509 证书,并使用私钥(受密码保护)将其导出。
创建自签名证书时,可以使用以下准则。
- 可以使用网络控制器 REST 终结点的 IP 地址作为 DnsName 参数 - 但不建议这样做,因为这样会要求网络控制器节点全部位于单个管理子网中(例如,位于单个机架上)
- 对于多节点网络控制器部署,指定的 DNS 名称将成为网络控制器群集的 FQDN(自动创建 DNS 主机 A 记录。)
- 对于单节点网络控制器部署,DNS 名称可以是网络控制器的主机名后跟完整域名。
多节点
可以使用 New-SelfSignedCertificate Windows PowerShell 命令创建自签名证书。
语法
New-SelfSignedCertificate -KeyUsageProperty All -Provider "Microsoft Strong Cryptographic Provider" -FriendlyName "<YourNCComputerName>" -DnsName @("<NCRESTName>")
示例用法
New-SelfSignedCertificate -KeyUsageProperty All -Provider "Microsoft Strong Cryptographic Provider" -FriendlyName "MultiNodeNC" -DnsName @("NCCluster.Contoso.com")
单节点
可以使用 New-SelfSignedCertificate Windows PowerShell 命令创建自签名证书。
语法
New-SelfSignedCertificate -KeyUsageProperty All -Provider "Microsoft Strong Cryptographic Provider" -FriendlyName "<YourNCComputerName>" -DnsName @("<NCFQDN>")
示例用法
New-SelfSignedCertificate -KeyUsageProperty All -Provider "Microsoft Strong Cryptographic Provider" -FriendlyName "SingleNodeNC" -DnsName @("SingleNodeNC.Contoso.com")
创建 CA 签名的 X.509 证书
若要使用 CA 创建证书,必须使用 Active Directory 证书服务 (AD CS) 部署公钥基础结构 (PKI)。
注意
可以使用第三方 CA 或工具(如 openssl)创建用于网络控制器的证书,但本主题中的说明特定于 AD CS。 若要了解如何使用第三方 CA 或工具,请参阅所用软件的文档。
使用 CA 创建证书包括以下步骤。
- 你或你的组织的域管理员或安全管理员将配置证书模板。
- 由你或组织的网络控制器管理员或 SCVMM 管理员从 CA 请求新证书。
证书配置要求
在下一步骤中配置证书模板时,请确保配置的模板包含以下必需元素。
- 证书使用者名称必须是 Hyper-V 主机的 FQDN
- 证书必须放置在本地计算机个人存储中 (My – cert:\localmachine\my)
- 证书必须同时具有服务器身份验证 (EKU: 1.3.6.1.5.5.7.3.1) 和客户端身份验证 (EKU: 1.3.6.1.5.5.7.3.2) 应用程序策略。
注意
如果 Hyper-V 主机上的个人 (My – cert:\localmachine\my) 证书存储具有多个 x.509 证书,并将使用者名称 (CN) 作为主机完全限定的域名 (FQDN),请确保 SDN 使用的证书具有 OID 为 1.3.6.1.4.1.311.95.1.1.1 的附加自定义增强型密钥使用属性。 否则,网络控制器与主机之间的通信可能不起作用。
配置证书模板
注意
在执行此过程之前,应在证书模板控制台中查看证书要求和可用的证书模板。 可以修改现有模板,也可以创建现有模板的副本,然后修改模板副本。 建议创建现有模板的副本。
- 在安装了 AD CS 的服务器上,在服务器管理器中,单击“工具”,然后单击“证书颁发机构”。 随即会打开证书颁发机构 Microsoft 管理控制台 (MMC)。
- 在 MMC 中,双击 CA 名称,右键单击“证书模板”,然后单击“管理”。
- 随即会打开证书模板控制台。 所有证书模板将显示在详细信息窗格中。
- 在“详细信息”窗格中,单击要复制的模板。
- 单击“操作”菜单,然后单击“复制模板”。 此时将打开模板“属性”对话框。
- 在模板“属性”对话框中的“使用者名称”选项卡上,单击“在请求中提供”。 (网络控制器 SSL 证书需要此设置。)
- 在模板“属性”对话框中的“请求处理”选项卡上,确保已选中“允许导出私钥”。 此外,请确保已选择“签名和加密”用途。
- 在模板“属性”对话框中的“扩展”选项卡上,选择“密钥使用”,然后单击“编辑”。
- 在“签名”中,确保已选择“数字签名”。
- 在模板“属性”对话框中的“扩展”选项卡上,选择“应用程序策略”,然后单击“编辑”。
- 在“应用程序策略”中,确保列出了“客户端身份验证”和“服务器身份验证”。
- 使用唯一名称保存证书模板的副本,例如“网络控制器模板”。
从 CA 请求证书
可以使用证书管理单元来请求证书。 可以请求由处理证书请求的证书颁发机构 (CA) 管理员预先配置并提供的任意类型的证书。
用户或本地管理员具有完成此过程时所需的最小组成员身份。
- 打开某个计算机的“证书”管理单元。
- 在控制台中,单击“证书(本地计算机)”。 选择“个人”证书存储。
- 在“操作”菜单上,指向“所有任务”,然后单击“请求新证书”,以启动“证书注册”向导。 单击“下一步”。
- 选择“管理员配置的证书”证书注册策略,然后单击“下一步”。
- 选择“Active Directory 注册策略”(根据在上一部分中配置的 CA 模板)。
- 展开“详细信息”部分并配置以下项。
- 确保“密钥用法”同时包括“数字签名”和“密钥加密”****。
- 确保“应用程序策略”包括“服务器身份验证”(1.3.6.1.5.5.7.3.1) 和“客户端身份验证”(1.3.6.1.5.5.7.3.2)。
- 单击 “属性”。
- 在“主题”选项卡上的“使用者名称”中,在“类型”中,选择“常用名称”。 在“值”中,指定“网络控制器 REST 终结点”。
- 单击“应用”,然后单击“确定”。
- 单击注册。
在证书 MMC 中,单击“个人存储”以查看从 CA 注册的证书。
导出证书并将其复制到 SCVMM 库
创建自签名证书或 CA 签名证书后,必须从证书管理单元导出带有私钥(采用 .pfx 格式)和不带私钥(Base-64.cer 格式)的证书。
然后,必须将两个导出的文件复制到导入 NC 服务模板时指定的 ServerCertificate.cr 和 NCCertificate.cr 文件夹。
- 打开证书管理单元 (certlm.msc),并在本地计算机的“个人证书存储”中找到证书。
- 右键单击该证书,单击“所有任务”,然后单击“导出”。 此时会打开“证书导出向导”。 单击“下一步”。
- 选择“是,导出私钥”选项,然后单击“下一步”。
- 选择“个人信息交换 - PKCS #12 (.PFX)”,然后接受默认为“尽可能包括证书路径中的所有证书”。
- 为要导出的证书分配用户/组和密码,然后单击“下一步”。
- 在“要导出的文件”页面上,浏览要放置导出文件的位置并为其命名。
- 同样,按 .CER 格式导出证书。 注意:若要导出为 .CER 格式,请取消选择“是,导出私钥”选项。
- 将 .PFX 复制到 ServerCertificate.cr 文件夹。
- 将 .CER 复制到 NCCertificate.cr 文件夹。
完成后,刷新 SCVMM 库中的这些文件夹并确保已复制这些证书。 继续进行网络控制器服务模板配置和部署。
对南行设备和服务进行身份验证
网络控制器与主机和 SLB MUX 设备的通信使用证书进行身份验证。 与主机的通信是通过 OVSDB 协议实现的,而与 SLB MUX 设备的通信是通过 WCF 协议实现的。
Hyper-V 主机与网络控制器的通信
若要通过 OVSDB 与 Hyper-V 主机通信,网络控制器需要向主机提供证书。 默认情况下,SCVMM 会选取网络控制器上配置的 SSL 证书,并将其用于与主机的南行通信。
这就是 SSL 证书必须配置客户端身份验证 EKU 的原因。 此证书在“服务器”REST 资源上配置(Hyper-V 主机在网络控制器中表示为服务器资源),可以通过运行 Windows PowerShell 命令 Get-NetworkControllerServer 来查看。
下面是服务器 REST 资源的部分示例。
"resourceId": "host31.fabrikam.com",
"properties": {
"connections": [
{
"managementAddresses": [
"host31.fabrikam.com"
],
"credential": {
"resourceRef": "/credentials/a738762f-f727-43b5-9c50-cf82a70221fa"
},
"credentialType": "X509Certificate"
}
],
若要进行相互身份验证,Hyper-V 主机还必须具有用于与网络控制器通信的证书。
可以从证书颁发机构 (CA) 注册证书。 如果在主机上找不到基于 CA 的证书,SCVMM 会创建自签名证书并在主机上预配证书。
网络控制器和 Hyper-V 主机相互间必须信任对方的证书。 Hyper-V 主机证书的根证书必须存在于本地计算机的网络控制器受信任的根证书颁发机构存储中,反之亦然。
使用自签名证书时,SCVMM 可确保本地计算机的受信任根证书颁发机构存储中存在所需的证书。
如果对 Hyper-V 主机使用基于 CA 的证书,则需要确保 CA 根证书存在于本地计算机的网络控制器受信任根证书颁发机构存储中。
软件负载均衡器 MUX 与网络控制器的通信
软件负载均衡器多路复用器 (MUX) 和网络控制器通过 WCF 协议进行通信,并使用证书进行身份验证。
默认情况下,SCVMM 会选取网络控制器上配置的 SSL 证书,并将其用于与 Mux 设备的南行通信。 此证书是在“NetworkControllerLoadBalancerMux”REST 资源上配置的,可以通过执行 PowerShell cmdlet Get-NetworkControllerLoadBalancerMux 来查看。
MUX REST 资源示例(部分):
"resourceId": "slbmux1.fabrikam.com",
"properties": {
"connections": [
{
"managementAddresses": [
"slbmux1.fabrikam.com"
],
"credential": {
"resourceRef": "/credentials/a738762f-f727-43b5-9c50-cf82a70221fa"
},
"credentialType": "X509Certificate"
}
],
若要进行相互身份验证,还需要在 SLB MUX 设备上具有证书。 使用 SCVMM 部署软件负载均衡器时,SCVMM 将自动配置此证书。
重要
在主机和 SLB 节点上,“受信任的根证书颁发机构”证书存储不包括任何“颁发对象”与“颁发者”不同的证书,这一点很重要。 如果包含,网络控制器与南行设备之间的通信将失败。
网络控制器和 SLB MUX 证书必须相互信任(SLB MUX 证书的根证书必须存在于网络控制器计算机受信任的根证书颁发机构存储中,反之亦然)。 使用自签名证书时,SCVMM 可确保本地计算机的受信任根证书颁发机构存储中存在所需的证书。