排查 Microsoft Intune 中 SCEP 证书配置文件的设备到 NDES 服务器通信问题

使用以下信息确定接收并处理了Intune简单证书注册协议 (SCEP) 证书配置文件的设备是否可以成功联系网络设备注册服务 (NDES) 提出质询。 在设备上,将生成私钥,并将证书签名请求 (CSR) 和质询从设备传递到 NDES 服务器。 若要联系 NDES 服务器,设备使用 SCEP 证书配置文件中的 URI。

本文参考 SCEP 通信流概述的步骤 2。

查看来自设备的连接的 IIS 日志

Internet Information Services (IIS) 日志文件包括所有平台的相同类型的条目。

  1. 在 NDES 服务器上,打开在以下文件夹中找到的最新 IIS 日志文件: %SystemDrive%\inetpub\logs\logfiles\w3svc1

  2. 在日志中搜索类似于以下示例的条目。 这两个示例都包含一个状态 200,该状态显示在末尾附近:

    fe80::f53d:89b8:c3e8:5fec%13 GET /certsrv/mscep/mscep.dll/pkiclient.exe operation=GetCACaps&message=default 80 - fe80::f53d:89b8:c3e8:5fec%13 Mozilla/4.0+(compatible;+Win32;+NDES+client) - 200 0 0 186 0.

    And

    fe80::f53d:89b8:c3e8:5fec%13 GET /certsrv/mscep/mscep.dll/pkiclient.exe operation=GetCACert&message=default 80 - fe80::f53d:89b8:c3e8:5fec%13 Mozilla/4.0+(compatible;+Win32;+NDES+client) - 200 0 0 3567 0

  3. 当设备与 IIS 联系时,将记录针对 mscep.dll 的 HTTP GET 请求。

    查看此请求末尾附近的状态代码:

    如果根本未记录连接请求,则设备与 NDES 服务器之间的网络上可能会阻止来自设备的联系人。

查看连接到 NDES 的设备日志

Android 设备

查看 设备 OMADM 日志。 查找类似于以下示例的条目,这些条目在设备连接到 NDES 时记录:

2018-02-27T05:16:08.2500000  VERB  Event  com.microsoft.omadm.platforms.android.certmgr.CertificateEnrollmentManager  18327    10  There are 1 requests
2018-02-27T05:16:08.2500000  VERB  Event  com.microsoft.omadm.platforms.android.certmgr.CertificateEnrollmentManager  18327    10  Trying to enroll certificate request: ModelName=AC_51bad41f-3854-4eb5-a2f2-0f7a94034ee8%2FLogicalName_39907e78_e61b_4730_b9fa_d44a53e4111c;Hash=1677525787
2018-02-27T05:16:09.5530000  VERB  Event  org.jscep.transport.UrlConnectionGetTransport  18327    10  Sending GetCACaps(ca) to https://<server>.msappproxy.net/certsrv/mscep/mscep.dll?operation=GetCACaps&message=ca
2018-02-27T05:16:14.6440000  VERB  Event  org.jscep.transport.UrlConnectionGetTransport  18327    10  Received '200 OK' when sending GetCACaps(ca) to https://<server>.msappproxy.net/certsrv/mscep/mscep.dll?operation=GetCACaps&message=ca
2018-02-27T05:16:21.8220000  VERB  Event  org.jscep.message.PkiMessageEncoder  18327     10 Encoding message: org.jscep.message.PkcsReq@2b06f45f[messageData=org.<server>.pkcs.PKCS10CertificationRequest@699b3cd,messageType=PKCS_REQ,senderNonce=Nonce [D447AE9955E624A56A09D64E2B3AE76E],transId=251E592A777C82996C7CF96F3AAADCF996FC31FF]
2018-02-27T05:16:21.8790000  VERB  Event  org.jscep.message.PkiMessageEncoder  18327     10  Signing pkiMessage using key belonging to [dn=CN=<uesrname>; serial=1]
2018-02-27T05:16:21.9580000  VERB  Event  org.jscep.transaction.EnrollmentTransaction  18327     10  Sending org.<server>.cms.CMSSignedData@ad57775

键项包括以下示例文本字符串:

  • 有 1 个请求
  • 发送 GetCACaps (ca) 时收到“200 正常” https://<server>.msappproxy.net/certsrv/mscep/mscep.dll?operation=GetCACaps&message=ca
  • 使用属于 [dn=CN=<username>; serial=1] 的密钥对 pkiMessage 进行签名

IIS 还会在 NDES 服务器的 %SystemDrive%\inetpub\logs\LogFiles\W3SVC1\ 文件夹中记录连接。 下面是一个示例:

fe80::f53d:89b8:c3e8:5fec%13 GET /certsrv/mscep/mscep.dll operation=GetCACert&message=ca 443 - 
fe80::f53d:89b8:c3e8:5fec%13 Dalvik/2.1.0+(Linux;+U;+Android+5.0;+P01M+Build/LRX21V) - 200 0 0 3909 0
fe80::f53d:89b8:c3e8:5fec%13 GET /certsrv/mscep/mscep.dll operation=GetCACaps&message=ca 443 - 
fe80::f53d:89b8:c3e8:5fec%13 Dalvik/2.1.0+(Linux;+U;+Android+5.0;+P01M+Build/LRX21V) - 200 0 0 421

iOS/iPadOS 设备

查看 设备调试日志。 查找类似于以下示例的条目,这些条目在设备连接到 NDES 时记录:

debug    18:30:53.691033 -0500    profiled    Performing synchronous URL request: https://<server>-contoso.msappproxy.net/certsrv/mscep/mscep.dll?operation=GetCACert&message=SCEP%20Authority\ 
debug    18:30:54.640644 -0500    profiled    Performing synchronous URL request: https://<server>-contoso.msappproxy.net/certsrv/mscep/mscep.dll?operation=GetCACaps&message=SCEP%20Authority\ 
default    18:30:55.483977 -0500    profiled    Attempting to retrieve issued certificate...\ 
debug    18:30:55.487798 -0500    profiled    Sending CSR via GET.\  
debug    18:30:55.487908 -0500    profiled    Performing synchronous URL request: https://<server>-contoso.msappproxy.net/certsrv/mscep/mscep.dll?operation=PKIOperation&message=MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwGggCSABIIZfzCABgkqhkiG9w0BBwOggDCAAgEAMYIBgjCCAX4CAQAwZjBPMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxHDAaBgoJkiaJk/IsZAEZFgxmb3VydGhjb2ZmZWUxGDAWBgNVBAMTD0ZvdXJ0aENvZmZlZSBDQQITaAAAAAmaneVjEPlcTwAAAAAACTANBgkqhkiG9w0BAQEFAASCAQCqfsOYpuBToerQLkw/tl4tH9E+97TBTjGQN9NCjSgb78fF6edY0pNDU+PH4RB356wv3rfZi5IiNrVu5Od4k6uK4w0582ZM2n8NJFRY7KWSNHsmTIWlo/Vcr4laAtq5rw+CygaYcefptcaamkjdLj07e/Uk4KsetGo7ztPVjSEFwfRIfKv474dLDmPqp0ZwEWRQGZwmPoqFMbX3g85CJT8khPaqFW05yGDTPSX9YpuEE0Bmtht9EwOpOZe6O7sd77IhfFZVmHmwy5mIYN7K6mpx/4Cb5zcNmY3wmTBlKEkDQpZDRf5PpVQ3bmQ3we9XxeK1S4UsAXHVdYGD+bg/bCafMIAGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQI5D5J2lwZS5OggASCF6jSG9iZA/EJ93fEvZYLV0v7GVo3JAsR11O7DlmkIqvkAg5iC6DQvXO1j88T/MS3wV+rqUbEhktr8Xyf4sAAPI4M6HMfVENCJTStJw1PzaGwUJHEasq39793nw4k268UV5XHXvzZoF3Os2OxUHSfHECOj

键项包括以下示例文本字符串:

  • operation=GetCACert
  • 尝试检索颁发的证书
  • 通过 GET 发送 CSR
  • operation=PKIOperation

Windows 设备

在连接到 NDES 的 Windows 设备上,可以查看 Windows 事件查看器设备并查找成功连接的迹象。 Connections在 DeviceManagement-Enterprise-Diagnostics-Provide>管理员 日志中记录为事件 ID 36

打开日志:

  1. 在设备上,运行 eventvwr.msc 以打开 Windows 事件查看器。

  2. 展开“应用程序和服务日志>”“Microsoft>Windows>DeviceManagement-Enterprise-Diagnostic-Provider>管理员”。

  3. 查找事件 36,类似于以下示例,其密钥行 为 SCEP:已成功生成证书请求

    Event ID:      36
    Task Category: None
    Level:         Information
    Keywords:
    User:          <UserSid>
    Computer:      <Computer Name>
    Description:
    SCEP: Certificate request generated successfully. Enhanced Key Usage: (1.3.6.1.5.5.7.3.2), NDES URL: (https://<server>/certsrv/mscep/mscep.dll/pkiclient.exe), Container Name: (), KSP Setting: (0x2), Store Location: (0x1).
    

排查状态代码 500 问题

与以下示例类似的Connections,状态代码为 500,指示在身份验证后模拟客户端用户权限未分配给 NDES 服务器上的 IIS_IUSRS 组。 状态值 500 显示在末尾:

2017-08-08 20:22:16 IP_address GET /certsrv/mscep/mscep.dll operation=GetCACert&message=SCEP%20Authority 443 - 10.5.14.22 profiled/1.0+CFNetwork/811.5.4+Darwin/16.6.0 - 500 0 1346 31

完成以下步骤以解决此问题:

  1. 在 NDES 服务器上,运行 secpol.msc 以打开本地安全策略。
  2. 展开“ 本地策略”,然后选择“ 用户权限分配”。
  3. 在右窗格中,双击“ 身份验证后模拟客户端 ”。
  4. 选择“添加用户或组...”,在“输入要选择的对象名称”框中输入IIS_IUSRS,然后选择“确定”。
  5. 选择“确定”。
  6. 重新启动计算机,然后再次尝试从设备建立连接。

测试 SCEP 服务器 URL 并对其进行故障排除

使用以下步骤测试 SCEP 证书配置文件中指定的 URL。

  1. 在 Intune 中,编辑 SCEP 证书配置文件并复制服务器 URL。 URL 应类似于 https://contoso.com/certsrv/mscep/mscep.dll

  2. 打开 Web 浏览器,然后浏览到该 SCEP 服务器 URL。 结果应为: HTTP 错误 403.0 – 禁止。 此结果指示 URL 正常运行。

    如果未收到该错误,请选择与看到的错误类似的链接以查看特定于问题的指南:

常规 NDES 消息

浏览到 SCEP 服务器 URL 时,会收到以下网络设备注册服务消息:

网络设备注册服务消息的屏幕截图。

  • 原因:此问题通常是Microsoft Intune连接器安装的问题。

    Mscep.dll 是一个 ISAPI 扩展,可截获传入请求,并在正确安装时显示 HTTP 403 错误。

    解决方案:检查SetupMsi.log文件以确定Microsoft Intune连接器是否已成功安装。 在以下示例中, 安装成功完成安装成功或错误状态:0 表示安装成功:

    MSI (c) (28:54) [16:13:11:905]: Product: Microsoft Intune Connector -- Installation completed successfully.
    MSI (c) (28:54) [16:13:11:999]: Windows Installer installed the product. Product Name: Microsoft Intune Connector. Product Version: 6.1711.4.0. Product Language: 1033. Manufacturer: Microsoft Corporation. Installation success or error status: 0.
    

    如果安装失败,请删除Microsoft Intune连接器,然后重新安装。 如果安装成功,并且你继续收到“常规 NDES”消息,请运行 iisreset 命令以重启 IIS。

HTTP 错误 503

浏览到 SCEP 服务器 URL 时,会收到以下错误:

HTTP 错误 503 的屏幕截图。服务不可用。

此问题通常是因为 IIS 中的 SCEP 应用程序池未启动。 在 NDES 服务器上,打开 IIS 管理器 并转到 “应用程序池”。 找到 SCEP 应用程序池并确认它已启动。

如果未启动 SCEP 应用程序池,请在服务器上检查应用程序事件日志:

  1. 在设备上,运行 eventvwr.msc 打开事件查看器并转到 Windows 日志>应用程序

  2. 查找类似于以下示例的事件,这意味着在收到请求时应用程序池崩溃:

    Log Name:      Application
    Source:        Application Error
    Event ID:      1000
    Task Category: Application Crashing Events
    Level:         Error
    Keywords:      Classic
    Description: Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x5215df96
    Faulting module name: ntdll.dll, version: 6.3.9600.18821, time stamp: 0x59ba86db
    Exception code: 0xc0000005
    

应用程序池崩溃的常见原因

  • 原因 1:NDES 服务器的受信任的根证书颁发机构证书存储中存在中间 CA 证书 (未自签名) 。

    解决方案:从受信任的根证书颁发机构证书存储中删除中间证书,然后重启 NDES 服务器。

    若要标识受信任的根证书颁发机构证书存储中的所有中间证书,请运行以下 PowerShell cmdlet: Get-Childitem -Path cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject}

    具有相同“ 颁发给 ”和“ 颁发者” 值的证书是根证书。 否则,它是中间证书。

    删除证书并重启服务器后,再次运行 PowerShell cmdlet 以确认没有中间证书。 如果有,检查组策略是否将中间证书推送到 NDES 服务器。 如果是这样,请从组策略中排除 NDES 服务器,然后再次删除中间证书。

  • 原因 2:证书吊销列表中的 URL (CRL) 被阻止或无法访问Intune证书连接器使用的证书。

    解决方案:启用其他日志记录以收集详细信息:

    1. 打开事件查看器,选择“视图”,确保选中“显示分析和调试日志”选项。
    2. 转到 “应用程序和服务日志>”“Microsoft>Windows>CAPI2>操作”,右键单击“ 操作”,然后选择“ 启用日志”。
    3. 启用 CAPI2 日志记录后,重现问题,并检查事件日志以排查问题。
  • 原因 3CertificateRegistrationSvc 上的 IIS 权限已启用 Windows 身份验证

    解决方案:启用 匿名身份验证 并禁用 Windows 身份验证,然后重启 NDES 服务器。

    匿名身份验证和 Windows 身份验证权限的屏幕截图。

  • 原因 4:NDESPolicy 模块证书已过期。

    CAPI2 日志 (请参阅原因 2 的解决方案) 将显示与在证书有效期外引用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP\Modules\NDESPolicy\NDESCertThumbprint 的证书相关的错误。

    解决方案:续订证书并重新安装连接器。

    1. 使用 certlm.msc 打开本地计算机证书存储,展开 “个人”,然后选择“ 证书”。

    2. 在证书列表中,找到满足以下条件的过期证书:

      • “预期用途”的值“客户端身份验证”。
      • “颁发给”或“公用名”的值与 NDES 服务器名称匹配。

      注意

      客户端身份验证扩展密钥用法 (EKU) 是必需的。 如果没有此 EKU,CertificateRegistrationSvc 将返回对 NDESPlugin 请求的 HTTP 403 响应。 此响应将记录在 IIS 日志中。

    3. 双击该证书。 在“ 证书 ”对话框中,选择“ 详细信息 ”选项卡,找到“ 指纹” 字段,然后验证值是否与注册表子项的值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP\Modules\NDESPolicy\NDESCertThumbprint 匹配。

    4. 选择“ 确定” 关闭“ 证书 ”对话框。

    5. 右键单击证书,选择“ 所有任务”,然后选择“ 使用新密钥请求证书 ”或“ 使用新密钥续订证书”。

    6. “证书注册 ”页中,选择“ 下一步”,选择正确的 SSL 模板,然后选择“ 注册此证书需要更多信息”。单击此处以配置设置

    7. 在“ 证书属性 ”对话框中,选择“ 使用者 ”选项卡,然后执行以下步骤:

      1. “使用者名称”下的“ 类型 ”下拉框中,选择“ 公用名”。 在“ ”框中,输入 NDES 服务器的 FQDN) (完全限定的域名。 然后,选择“添加”。
      2. “备用名称”下的“ 类型 ”下拉框中,选择“ DNS”。 在“ ”框中,输入 NDES 服务器的 FQDN。 然后,选择“添加”。
      3. 选择 “确定” 关闭“ 证书属性 ”对话框。
    8. 选择“ 注册”,等待注册成功完成,然后选择“ 完成”。

    9. 重新安装Intune证书连接器,将其链接到新创建的证书。 有关详细信息,请参阅安装 Microsoft Intune 证书连接器

    10. 关闭证书连接器 UI 后,重启Intune连接器服务和万维网发布服务。

GatewayTimeout

浏览到 SCEP 服务器 URL 时,会收到以下错误:

Gatewaytimeout 错误的屏幕截图。

  • 原因Microsoft Entra应用程序代理连接器服务未启动。

    解决方案:运行 services.msc,并确保Microsoft Entra应用程序代理连接器服务正在运行,并且“启动类型”设置为“自动”。

HTTP 414 请求 URI 太长

浏览到 SCEP 服务器 URL 时,会收到以下错误: HTTP 414 Request-URI Too Long

  • 原因:IIS 请求筛选未配置为支持 NDES 服务接收的长 URL (查询) 。 配置 NDES 服务 以用于 SCEP 基础结构时,会配置此支持。

  • 解决方案:配置对长 URL 的支持。

    1. 在 NDES 服务器上,打开 IIS 管理器,选择 “默认网站>请求筛选>编辑功能设置” ,打开 “编辑请求筛选设置” 页。

    2. 配置以下设置:

      • 最大 URL 长度 (字节) = 65534
      • 最大查询字符串 (字节) = 65534
    3. 选择“ 确定” 保存此配置并关闭 IIS 管理器。

    4. 通过查找以下注册表项来验证此配置,以确认其具有指示的值:

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters

      以下值设置为 DWORD 条目:

      • 名称: MaxFieldLength,十进制值为 65534
      • 名称: MaxRequestBytes,十进制值为 65534
    5. 重启 NDES 服务器。

无法显示此页面

配置了Microsoft Entra应用程序代理。 浏览到 SCEP 服务器 URL 时,会收到以下错误:

This page can't be displayed

  • 原因:当 SCEP 外部 URL 在应用程序代理配置中不正确时,会出现此问题。 此 URL 的示例为 https://contoso.com/certsrv/mscep/mscep.dll

    解决方案:对应用程序代理配置中的 SCEP 外部 URL 使用默认域 yourtenant.msappproxy.net。

500 - 内部服务器错误

浏览到 SCEP 服务器 URL 时,会收到以下错误:

500 - 内部服务器错误的屏幕截图。

  • 原因 1:NDES 服务帐户已锁定或其密码已过期。

    解决方案:解锁帐户或重置密码。

  • 原因 2:MSCEP-RA 证书已过期。

    解决方案:如果 MSCEP-RA 证书已过期,请重新安装 NDES 角色或请求新的 CEP 加密和 Exchange 注册代理 (脱机请求) 证书。

    若要请求新证书,请执行以下步骤:

    1. 在证书颁发机构 (CA) 或颁发 CA,打开证书模板 MMC。 确保登录用户和 NDES 服务器对 CEP 加密和 Exchange 注册代理具有 读取注册 权限, (脱机请求) 证书模板。

    2. 检查 NDES 服务器上过期的证书,从证书复制 使用者 信息。

    3. 打开“计算机证书 MMC ”帐户

    4. 展开 “个人”,右键单击“ 证书”,然后选择“ 所有任务>请求新证书”。

    5. 在“ 请求证书 ”页上,选择“ CEP 加密”,然后选择“ 注册此证书需要更多信息”。单击此处以配置设置

      “请求证书”页的屏幕截图,其中选择了“CEP 加密”。

    6. “证书属性”中,选择“ 使用者 ”选项卡,在“ 使用者名称” 中填写你在步骤 2 中收集的信息,选择“ 添加”,然后选择“ 确定”。

    7. 完成证书注册。

    8. 打开 “我的用户帐户的证书 MMC”。

      注册 Exchange 注册代理 (脱机请求) 证书时,必须在用户上下文中完成。 因为此证书模板的 “使用者类型 ”设置为 “用户”。

    9. 展开 “个人”,右键单击“ 证书”,然后选择“ 所有任务>请求新证书”。

    10. 在“ 请求证书 ”页上,选择“ Exchange 注册代理 (脱机请求) ”,然后选择 “注册此证书需要更多信息”。单击此处以配置设置

      “请求证书”页的屏幕截图,其中选择了 Exchange 注册代理 (脱机请求) 。

    11. “证书属性”中,选择“ 使用者 ”选项卡,使用在步骤 2 中收集的信息填写 “使用者名称 ”,然后选择“ 添加”。

      “证书属性”窗口中“使用者”选项卡的屏幕截图。

      选择“ 私钥 ”选项卡,选择“ 使私钥可导出”,然后选择“ 确定”。

      “证书属性”窗口中“私钥”选项卡的屏幕截图。

    12. 完成证书注册。

    13. 从当前用户证书存储区导出 Exchange 注册代理 (脱机请求) 证书。 在“证书导出向导”中,选择“ 是,导出私钥”。

    14. 将证书导入本地计算机证书存储。

    15. 在“证书 MMC”中,对每个新证书执行以下操作:

      右键单击证书,选择“ 所有任务>管理私钥”,向 NDES 服务帐户添加 “读取 ”权限。

    16. 运行 iisreset 命令以重启 IIS。

后续步骤

如果设备成功到达 NDES 服务器来显示证书请求,则下一步是查看Intune证书连接器策略模块