Windows 中的用户证书显示“无法找到用于解密的证书和私钥。”

Windows 中的用户证书显示“无法找到用于解密的证书和私钥。”

有许多计算机的用户证书突然停止工作。

运行certutil -silent -user -store my表明受影响用户的所有用户证书已停止工作。

    my
================ Certificate 0 ================
Serial Number: 2a0000210be8f0775a3a2e2b7200040000210b
Issuer: CN=PROD Issuing CA, DC=somecompany, DC=Com, DC=Au
 NotBefore: 10/01/2017 7:46 AM
 NotAfter: 10/01/2018 7:46 AM
Subject: CN=username, OU=somecompany, OU=Level 1, OU=Laptop Users, OU=Special Group Users, DC=somecompany, DC=Com, DC=Au
Non-root Certificate
Template: 1.3.6.1.4.1.311.21.8.4586432.4805332.10505398.7351119.9274134.0.14270575.7769536
Cert Hash(sha1): cc 3b d0 2c 03 a1 d9 d4 0d 28 31 a7 84 c8 6d cb 6d 97 27 d8
  Key Container = 48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d
  Provider = Microsoft Enhanced Cryptographic Provider v1.0
Cannot find the certificate and private key for decryption.

================ Certificate 1 ================
Serial Number: 7b4d6131959b5f6cd272
Issuer: CN=Communications Server
 NotBefore: 25/08/2017 10:41 AM
 NotAfter: 25/08/2017 6:41 PM
Subject: [email protected]
Non-root Certificate
Template: 
Cert Hash(sha1): 80 25 75 64 60 77 21 16 35 18 ee 04 4f 87 bc 5f f0 ae b3 2a
  Key Container = [email protected]
  Provider = Microsoft Enhanced Cryptographic Provider v1.0
Cannot find the certificate and private key for decryption.

检查%APPDATA%\Microsoft\Crypto\RSA文件夹可以看到私钥文件存在,即在本例中是第一个证书48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d

导致此问题的潜在原因是什么?我怀疑私钥的加密密钥已被删除/修改;但不知道该如何确认是否正在更改。

%APPDATA%\Microsoft\SystemCertificates\My\Certificates\CC3BD02C03A1D9D40D2831A784C86DCB6D9727D8在这种情况下,我们使用证书哈希(sha1)来查找存在的用户证书。

%APPDATA%\Microsoft\Crypto\RSA\S-1-5-21-2091123715-180627453-533688462-45495\48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d然后使用密钥容器字段,我们找到其中存在的私钥。

文件被修改了:

• SystemCertificates 文件 CC3BD02C03A1D9D40D2831A784C86DCB6D9727D8 最后修改时间为 2017 年 8 月 25 日上午 10:55。此时是否请求了新密钥,即在此之前是否有用户报告过问题?

• 下面的私钥文件%APPDATA%\Microsoft\Crypto\RSA\S-1-5-21-2091123715-180627453-533688462-45495\48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d最后修改时间为 2017 年 10 月 1 日上午 7:56(接近系统证书文件上发布的时间)

• 私钥已使用主密钥加密,%APPDATA%\Microsoft\Protect\<user SID>\c77f3872-e1e2-4449-9729-cc97e85e4a3c上次修改时间为 2017 年 7 月 25 日上午 8:19

• Protect 文件夹包含用于解密私钥的主密钥,文件最后修改时间为 2017 年 8 月 14 日上午 8:23

%APPDATA%\Microsoft\SystemCertificates\My\Certificates2017 年 12 月 7 日凌晨 12:00 至早上 7:50 以不同时间间隔修改了 0 字节证书文件,2017 年 8 月 6 日晚上 11:52 至 2017 年 9 月 6 日上午 8:33 每隔 8 分钟修改一次

目前我们正在使用 Windows 审核来查找对%APPDATA%\Microsoft\SystemCertificates文件夹的修改%APPDATA%\Microsoft\Crypto以及%APPDATA%\Microsoft\Protect

然而,鉴于证书和私钥文件似乎存在,不确定这是否能找出原因。

应用程序日志还包含针对 CertificationServicesClient-AutoEnrollment 源的错误:

域\用户名的自动证书注册失败(0x8007003a)指定的服务器无法执行请求的操作。

有任何推荐的步骤可以进一步确定“无法找到用于解密的证书和私钥”错误的根本原因吗?

答案1

该问题似乎是由远程密码重置引起的。在测试环境中复制了该问题:

• 具有配置了自动注册的证书颁发机构的 Server 2012 R2 域控制器

• Windows 7 x64 客户端已加入域

• 仅托管 DC 和客户端的隔离网络

• 具有可导出私钥的用户证书模板

  1. 通过自动注册组策略将用户证书部署到客户端
  2. 从网络中删除客户端
  3. 已确认用户可以导出证书私钥,允许在 Windows 7 客户端上使用 certmgr 导出
  4. 客户端重新连接至网络
  5. 从域控制器重置登录客户端的用户密码
  6. 使用“以身份运行”在客户端上缓存更新后的密码
  7. 客户端与网络断开连接
  8. 注销/登录时断开网络连接并使用更新的缓存凭据
  9. 无法导出私钥
  10. 客户端重新连接至网络
  11. 无法导出私钥
  12. 注销/登录连接到网络 - 现在可以再次导出私钥

私钥通过使用存储在 %APPDATA%\Microsoft\Protect\\ 中的主密钥进行加密保护,主密钥通过包括用户密码在内的多项组合进一步加密。如果主密钥无法解密,则私钥无法使用。

密码更改方法 - 客户端上按 Ctrl+Alt+Del“更改密码”

使用进程监视器识别的本地安全机构进程(LSASS.exe)执行以下操作:

  1. 通过端口 TCP 端口 88(kerberos)和 TCP 端口 464(kpasswd / kerberos v5)与域控制器通信
  2. 更新 HKLM\Security\Cache 下的注册表项
  3. 写入 \domaincontroller\PIPE\protected_storage
  4. 用户配置文件服务更新 HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\\RefCount
  5. 更新主密钥,用于解密私钥:

%APPDATA%\Microsoft\Protect\\

  1. 读取 %APPDATA%\Microsoft\Protect 下的 SYNCHIST 和 CREDHIST 文件
  2. 更新 %APPDATA%\Microsoft\Protect\SYNCHIST 文件
  3. 过程1-7可能重复多次
  4. 更新 C:\Windows\debug\PASSWD.log,并显示“正在尝试更改用户的服务器/域密码

私钥由于步骤 5 - 7 而继续起作用。

密码更改方法 - 通过 Active Directory 用户和计算机进行远程重置

  1. SYNCHIST 和主密钥文件不会立即自动更新
  2. 注销/登录网络更新 SYNCHIST 和主密钥文件,证书正常

相关内容