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.

    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 OK” 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 事件查看器的设备,并查找成功连接的指示。 连接在 DeviceManagement-Enterprise-Diagnostics-Provide Admin 日志中记录为事件 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 疑难解答

与以下示例类似的连接(状态代码为 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:对于 Intune 证书连接器使用的证书,证书吊销列表(CRL)中的 URL 将被阻止或无法访问。

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

    1. 打开事件查看器,选择“视图,确保选中“显示分析和调试日志”选项。
    2. 转到应用程序和服务日志>Microsoft>Windows>CAPI2>操作,右键单击“操作,然后选择“启用日志”。
    3. 启用 CAPI2 日志记录后,重现问题,并检查事件日志以解决问题。
  • 原因 3:CertificateRegistrationSvc 上的 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(查询)。 配置用于 SCEP 基础结构的 NDES 服务,将配置此支持。

  • 解决方案:配置对长 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 证书连接器策略模块