DPM 证书疑难解答(第 1 部分):一般疑难解答

本文档旨在为您提供排除 System Center 2012 Data Protection Manager (DPM) 证书身份验证故障的快速指南。本文档假定您已经熟悉 DPM 2012,并已拥有一个运行良好的证书基础架构。本文档同时假定您已经根据以下博文中介绍的要求,安装了证书:

如何借助 Data Protection Manager 使用证书来对不受信任工作组或域中的计算机进行身份验证
https://blogs.technet.com/b/dpm/archive/2012/04/23/how-to-use-certificates-to-authenticate-computers-in-workgroups-or-untrusted-domains-with-data-protection-manager.aspx

针对您在借助 DPM 保护功能使用证书时可能会遇到的一些常见错误警报,我们将从一个较高的层次简要介绍针对性的注意事项和措施,以及如何评估根本原因。我还附带提供一些 DPM GUI 错误的屏幕截图、事件日志错误和一些日志代码段。我得承认日志读取不是很直观,因此我突出显示了相关的部分。

服务

 

1.确保可启动 DPMRA 服务。

2.确保可启动 DPM CPWrapper 服务。这一点再强调也不为过。在我的测试过程中,我进行了多个操作来模拟一次失败。

a.) 删除了 DPM 证书
b.) 删除了客户端证书
c.) 删除了 DPM 服务器上的 DPM 注册表项
d.) 删除了 DPM 服务器上的成员服务器注册表项
e.) 删除了成员服务器上的 DPM 注册表项
f.) 删除了成员服务器上的成员服务器注册表项。

在每次失败后,我将存放证书或回滚注册表项,而且我几乎每次都需要重启 DPM CPWrapper 服务。考虑到这一点,您应将在故障排除过程中重启 DPM CPWrapper 服务作为一项非常普遍的实践。

3.确保启动加密服务

端口

1.) 记住 DPM 证书的使用依赖于端口 6076 来进行证书保护。您可能需要调整中间防火墙设置来运行系统打开此端口,以进行基于证书的保护。您可使用 netstat 命令来验证端口 6076 是否在侦听来自两端的通信。

键入:netstat –ano

netstat –ano |findstr 6076

a = 显示所有连接和侦听端口

n = 以数字形式显示地址和端口号。

o = 显示与每个连接相关的所属进程 ID。

|findstr 6076 将仅显示该端口的关联。

使用以下命令:netstat –ano |findstr 6076

我们将看到端口 6067 正在侦听:

图像

您也可为 GUI 界面使用 https://technet.microsoft.com/zh-cn/sysinternals/bb897437.aspx 中的 TCPView 来显示哪些服务正在侦听哪些端口。

示例:

图像

使用证书进行身份验证并不会消除进行诸如名称解析、Kerbero 和 LDAP 等域通信类型对其他端口的需要。您仍需这些端口来进行适当的 DNS 或 NetBIOS 名称解析和 AD 身份验证。

https://technet.microsoft.com/zh-cn/library/ff399341.aspx

 

防火墙

如果是在关闭了防火墙,并运行 setdpmserver 命令的目标服务器上,那么该命令将不会为 TCP 端口 6076 创建必要的防火墙规则。如果您关闭了防火墙,那么该问题将不会存在。如果您在稍后的日期中再次打开防火墙,那么您的通信将因为未创建该规则而失败。 要修改该规则,您可进行以下操作中的一项:

a.) 保持集成的防火墙处于关闭状态
b.) 手动创建规则本身
c.) 重新运行 setdpmserver 规则。

验证是否添加了该端口。

图像

 

 

 

创建的防火墙规则

图像
创建的这一防火墙规则将指定 6067 的一个本地端口和“所有端口”的远程端口。

图像

4.) 在使用 DPM 测试版的情况中,如果客户端上的防火墙关闭,那么您将获得以下错误:

图像

您将需要打开防火墙。再次说明,这一问题已经在 RTM 中为 DPM 2012 解决了。

 

 

证书

默认情况下,证书将通过 Web 注册保存在当前用户存储区中,但是需要借助私钥导出和导入本地计算机存储区。 再次说明,只有您正在使用 Web 注册的情况下,才是如此。如果系统为“注册”配置证书,那么系统可指定放置于本地计算机存储区的证书。

命令语法(AttachProductionServerWithCertificate 和 Set-DPMCredentials commands)中的指纹在命令中指定证书时不需要留有空格。

以下是一个示例。
以下是 DPM 服务器证书:

图像

注意指纹中的空格。

当我们使用证书指纹来生成 bin 文件时,我们需要删除空格。

图像

注意本示例中所使用的 Set-DPMCredentials 命令语法。

Set-DPMCredentials –DPMServerName DPM2012.contoso.com –Type Certificate –Action Configure –OutputFilePath C:\Temp -Thumbprint 493f27f35b2105804afbd49bb5a59bf2e380e00

这是针对 DPM 服务器证书的指纹,其中没有空格。

证书必须指定某些参数:

X.509 V3 证书
增强密钥使用情况中应进行客户端身份验证和服务器身份验证。
密钥长度应大于等于 1024 位。
密钥类型应为交换类型。
证书不得为自签署的类型。
证书的主题名称和根证书不得为空。
证书不得为 API 下一代加密 (CNG) 密钥。DPM 不支持
包含 CNG 密钥的证书。
相关证书颁发机构的吊销服务器应在线,且
受保护的服务器和 DPM 服务器均可访问该吊销服务器。
证书必须有相关的私钥

您可使用以下命令来验证服务器中使用的证书的证书参数
certutil –store –v my

C:\>certutil -store -v my

================ Certificate 1 ================

X509 Certificate: <<<<<Denotes x.509>>>>>

Version: 3 <<<<<Denotes V3>>>>>

Serial Number: 5da52bdc000226d4c235

Signature Algorithm:

    Algorithm ObjectId: 1.2.840.113549.1.1.5 sha1RSA

    Algorithm Parameters:

    05 00

Issuer:

    CN=Corp NAP CA 1

 

 NotBefore: 9/14/2011 7:31 AM

 NotAfter: 9/17/2011 7:31 AM

 

……….

 

Public Key Length: 2048 bits <<<<<Denotes length>>>>>

Public Key: UnusedBits = 0

    0000 30 82 01 0a 02 82 01 01 00 97 3c 11 94 27 58 47

    0010 4a 51 55 60 a5 b6 32 8a 4e 4b 59 1d 56 1f ac 53

……….

 

    Application Policies

        [1]Application Certificate Policy:

             Policy Identifier=Server Authentication <<<<<Denotes server>>>>>

        [2]Application Certificate Policy:

             Policy Identifier=Client Authentication <<<<<Denotes client>>>>>

 

……….

  CERT_KEY_PROV_INFO_PROP_ID(2):

    Key Container = {57CE5453-2951-4AE2-A036-E685FC52AB83}

  Unique container name: bed058e40c5ed733d5da8a6655583c3d_d5520479-582f-4563-8c84-e153a68e8fe2

    Provider = Microsoft Enhanced Cryptographic Provider v1.0 <<<<<Denotes provider - must be cryptographic provider and NOT Key Storage Provider >>>>>

    ProviderType = 1

    Flags = 60

    KeySpec = 1 -- AT_KEYEXCHANGE <<<<<Denotes type is Exchange>>>>>

 

……….

 

Private key is NOT exportable

Encryption test passed

此输出结果经过整理,关键要点已在上方加粗。

如果证书无效,那么您将在运行命令时可能看到类似于这样的错误。

示例错误
***********

C:\Program Files\Microsoft Data Protection Manager\DPM\bin>SetDPMServer -dpmCredential CertificateConfiguration_DPM2012.contoso.com.bin -Outputfilepath c:\temp

-Thumbprint 4301114a1d05b44bc834f34f04f4cb4333433bac

Error(Id= 33234), Details :The certificate provided with thumbprint 4301114a1d05b44bc834f34f04f4cb4333433bac on the personal machine store of machine MemberServerTest does not correspond to the requirements of DPM.证书未满足以下要求。

本地计算机不信任该证书。

请确保证书满足以下要求:

1) 本地计算机信任证书,且证书未过期。
2) 相关证书颁发机构的吊销服务在线。
3) 证书拥有包含有效交换算法的相关私钥。
4) 证书的公钥长度大于等于 1024 位。
5) 如果启用了 EnhancedKey,则证书应进行服务器身份验证和客户端身份验证。
6) 证书及其根 CA 不应为空。
7) DPM 不支持包含 API 下一代加密 (CNG) 密钥的证书。

有关详细信息,请参阅“帮助”。
SetDpmServer 失败,错误消息为 errorcode =0x809909b4,错误消息显示为:(null)

请注意 33234 错误等同于一个无效的证书。所使用的证书很可能不满足我们的要求。您还可使用命令 certutil –store –v my 来验证我们正在使用的证书。

Attach-ProductionServerWithCertificate and the SetDPMServer 命令的疑难解答

Attach-ProductionServerWithCertificate

1.) 如果您收到以下错误,则在 DPM 服务器上立即进行附加尝试:

图像

您需要将客户端 bin 文件放置在 DPM 服务器 system32 目录上,或者指定 bin 文件的完整路径。 在上述示例中,我们指定了:

DPMServerName:DPM2012
PSCredential:CertificateConfiguration_MemberServer.Contoso.com.bin < ----这并不是 bin 文件的默认完整路径,因此请搜索 system32 目录。

如果我们将证书存放于名为 C:\Cert 的文件夹中,那么我们将指定:

DPMServerName:DPM2012
PSCredential:C:\Cert\ CertificateConfiguration_MemberServer.Contoso.com.bin <- -这是我们希望使用的证书的完整路径。

2.) 在 DPM 服务器上,DPM 服务器上的 Attach-ProductionServerWithCertificate 将为包含证书的受保护的计算机创建一个注册表项。

HKLM\Software\Microsoft\Microsoft Data Protection Manager\Agent\2.0\Certificates\<Protected ComputerName>

图像

请注意证书名称和端口编号。

如果 Attach-ProductionServerWithCertificate 失败,则需要考虑是否属于以下情况:

a.) 在 DPM 服务器和受保护计算机之间存在网络问题。您可以使用 telnet 命令来验证端口 6076 是否开放以实现这两个端口之间的通信。

b.) 为 DPM 服务器所用的证书在受保护的计算机上不受信任。在证书 MMC 中,验证 ROOT CA 证书是否出现在受信任的根证书颁发机构。请转至工作站,检查 DPMRACurr.errlog 文件是否失败。

 

SetDPMServer

1.) 在目标服务上指定一 个 Wrong Bin 文件

在本示例中,SetDPMServer 命令被用于设置保护。我们特意使用这一错误的 bin 文件来让 DPM 服务器模拟一个错误。

图像

 

2.) 在 DPM 服务器上,在运行 Set-DPMCredential 时,系统将创建以下注册表项:

HKLM\Software\Microsoft\Microsoft Data Protection Manager\Agent\2.0\Certificates\<DPMServerName>

请注意指定的证书名称、端口编号和指纹。

Set-DPMCredentail 命令还将启用 DPM CPWrapper 服务,并配置该服务以使用证书。

3.) 运行此服务时发生的失败将记录于 DPM 命令管理程序、MSDPM*.errlog 和 CAP12 事件查看器日志中。

示例错误

DPM 管理控制台中的错误:
***************************

Set-DPMCredentials :Unable to find certificate with the thumbprint 8d8bddbc15d73f3c20c3faf3faab9b69075e582c on the personal machine store of machine DPM2012.contoso.com.(ID:33231)

MSDPMCurr.errlog 中的错误
************************

ConfigureCertificates.cs(400) NORMAL Getting certificate for thumbPrint :8d8bddbc15d73f3c20c3faf3faab9b69075e582c

CertificatesHelper.cs(51) NORMAL Looking for Certificate with thumbprint: 8d8bddbc15d73f3c20c3faf3faab9b69075e582c in store: My at location: LocalMachine

CertificatesHelper.cs(88) NORMAL Could not find Certificate with thumbPrint: 8d8bddbc15d73f3c20c3faf3faab9b69075e582c in store :My at location :LocalMachine

ConfigureCertificates.cs(133) WARNING Getting certificate for thumbPrint : 8d8bddbc15d73f3c20c3faf3faab9b69075e582c failed

ConfigureCertificates.cs(256) WARNING Failed to configure the dpm credentials with exception: Microsoft.Internal.EnterpriseStorage.Dls.Utils.DlsException: Getting certificate for thumbPrint : 8d8bddbc15d73f3c20c3faf3faab9b69075e582c failed

ConfigureCertificates.cs(256) WARNING at Microsoft.Internal.EnterpriseStorage.Dls.CertificateHelper.ConfigureCertificates.GetCertificateByThumbPrint(String thumbPrint)

ConfigureCertificates.cs(256) WARNING at Microsoft.Internal.EnterpriseStorage.Dls.CertificateHelper.ConfigureCertificates.ConfigureDPMCredentials(String certificateThumbPrint, String authCAThumbprint, String outputFilePath, Boolean generateFileOnly)

结语

DPM 基于证书的身份验证第 1 部分到此结束。第 2 部分将涉及注册表项缺失或损毁的疑难解答,而第 3 部分将介绍缺失和无效的证书。

Shane Brasher | 高级支持呈报工程师

 

App-V 团队博客:https://blogs.technet.com/appv/
ConfigMgr 支持团队博客:https://blogs.technet.com/configurationmgr/
DPM 团队博客:https://blogs.technet.com/dpm/
MED-V 团队博客:https://blogs.technet.com/medv/
Orchestrator 支持团队博客:https://blogs.technet.com/b/orchestrator/
Operations Manager 团队博客:https://blogs.technet.com/momteam/
SCVMM 团队博客:https://blogs.technet.com/scvmm
Server App-V 团队博客:https://blogs.technet.com/b/serverappv
Service Manager 团队博客:https://blogs.technet.com/b/servicemanager
System Center Essentials 团队博客:https://blogs.technet.com/b/systemcenteressentials
WSUS 支持团队博客:https://blogs.technet.com/sus/

Forefront Server Protection 博客:https://blogs.technet.com/b/fss/
Forefront Endpoint Security 博客:https://blogs.technet.com/b/clientsecurity/
Forefront Identity Manager 博客:https://blogs.msdn.com/b/ms-identity-support/
Forefront TMG 博客:https://blogs.technet.com/b/isablog/
Forefront UAG 博客:https://blogs.technet.com/b/edgeaccessblog/