Microsoft Intune 中 SCEP 证书配置文件的设备到 NDES 服务器通信疑难解答
使用以下信息来确定接收和处理 Intune 简单证书注册协议(SCEP)证书配置文件的设备是否可以成功联系网络设备注册服务(NDES)来提出质询。 在设备上,生成私钥,并将证书签名请求(CSR)和质询从设备传递到 NDES 服务器。 若要联系 NDES 服务器,设备使用 SCEP 证书配置文件中的 URI。
本文引用 SCEP 通信流概述的步骤 2。
查看来自设备的连接的 IIS 日志
Internet Information Services (IIS) 日志文件包括所有平台的相同类型的条目。
在 NDES 服务器上,打开以下文件夹中找到的最新 IIS 日志文件: %SystemDrive%\inetpub\logs\logfiles\w3svc1
在日志中搜索类似于以下示例的条目。 这两个示例都包含状态 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
当设备与 IIS 联系时,将记录mscep.dll的 HTTP GET 请求。
查看此请求末尾附近的状态代码:
状态代码 200:此状态指示与 NDES 服务器的连接成功。
状态代码 500:IIS_IUSRS组可能缺少正确的权限。 请参阅 本文后面的状态代码 500 疑难解答。
如果状态代码不是 200 或 500:
请参阅 本文后面的“测试和排查 SCEP 服务器 URL ”,以帮助验证配置。
有关不太常见的错误代码的信息,请参阅 IIS 7 及更高版本中 的 HTTP 状态代码。
如果未记录连接请求,则来自设备的联系人可能会阻止设备与 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。>
若要打开日志,请执行以下操作:
在设备上,运行 eventvwr.msc 以打开 Windows 事件查看器。
Microsoft Windows>DeviceManagement-Enterprise-Diagnostic-Provider>管理员展开应用程序和服务日志。>>
查找类似于以下示例的事件 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
完成以下步骤以解决此问题:
- 在 NDES 服务器上,运行 secpol.msc 以打开本地安全策略。
- 展开 “本地策略”,然后选择“ 用户权限分配”。
- 在右窗格中进行身份验证后,双击“模拟客户端”。
- 选择“添加用户或组...”,在“输入对象名称以选中”框中输入IIS_IUSRS,然后选择“确定”。
- 选择“确定”。
- 重新启动计算机,然后再次尝试从设备建立连接。
测试和排查 SCEP 服务器 URL 问题
使用以下步骤测试 SCEP 证书配置文件中指定的 URL。
在 Intune 中,编辑 SCEP 证书配置文件并复制服务器 URL。 URL 应类似于
https://contoso.com/certsrv/mscep/mscep.dll
。打开 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 时,会收到以下错误:
此问题通常是因为 IIS 中的 SCEP 应用程序池未启动。 在 NDES 服务器上,打开 IIS 管理器 并转到 应用程序池。 找到 SCEP 应用程序池并确认它已启动。
如果未启动 SCEP 应用程序池,请检查服务器上的应用程序事件日志:
在设备上,运行 eventvwr.msc 以打开事件查看器并转到 Windows 日志>应用程序。
查找类似于以下示例的事件,这意味着收到请求时应用程序池崩溃:
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 将被阻止或无法访问。
解决方案:启用其他日志记录以收集详细信息:
- 打开事件查看器,选择“视图”,确保选中“显示分析和调试日志”选项。
- 转到应用程序和服务日志>Microsoft>Windows>CAPI2>操作,右键单击“操作”,然后选择“启用日志”。
- 启用 CAPI2 日志记录后,重现问题,并检查事件日志以解决问题。
原因 3:CertificateRegistrationSvc 上的 IIS 权限已启用 Windows 身份验证。
解决方案:启用 匿名身份验证 并禁用 Windows 身份验证,然后重启 NDES 服务器。
原因 4:NDESPolicy 模块证书已过期。
CAPI2 日志(请参阅原因 2 的解决方案)将显示与证书有效期之外引用
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP\Modules\NDESPolicy\NDESCertThumbprint
的证书相关的错误。解决方案:续订证书并重新安装连接器。
用于
certlm.msc
打开本地计算机证书存储,展开 “个人”,然后选择“ 证书”。在证书列表中,找到满足以下条件的过期证书:
- 预期用途的值是客户端身份验证。
- “颁发给”或“公用名”的值与 NDES 服务器名称匹配。
注意
需要客户端身份验证扩展密钥用法(EKU)。 如果没有此 EKU,CertificateRegistrationSvc 将返回对 NDESPlugin 请求的 HTTP 403 响应。 此响应将记录在 IIS 日志中。
双击该证书。 在 “证书 ”对话框中,选择“ 详细信息 ”选项卡,找到 指纹 字段,然后验证该值是否与注册表子项的值
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP\Modules\NDESPolicy\NDESCertThumbprint
匹配。选择“确定”关闭“证书”对话框。
右键单击证书,选择“所有任务”,然后选择“使用新密钥请求证书”或“使用新密钥续订证书”。
在“证书注册”页中,选择“下一步”,选择正确的 SSL 模板,然后选择注册此证书所需的详细信息。单击此处配置设置。
在 “证书属性 ”对话框中,选择“ 使用者 ”选项卡,然后执行以下步骤:
- 在 “使用者名称”下,在 “类型 ”下拉列表框中,选择 “公用名”。 在 “值 ”框中,输入 NDES 服务器的完全限定域名(FQDN)。 然后选择“添加”。
- 在 “可选名称”下,在 “类型 ”下拉列表框中,选择 DNS。 在 “值 ”框中,输入 NDES 服务器的 FQDN。 然后选择“添加”。
- 选择“确定”关闭“证书属性”对话框。
选择“注册”,等待注册成功完成,然后选择“完成”。
重新安装 Intune 证书连接器,将其链接到新创建的证书。 有关详细信息,请参阅 安装 Microsoft Intune 证书连接器。
关闭证书连接器 UI 后,重启 Intune 连接器服务和万维网发布服务。
GatewayTimeout
浏览到 SCEP 服务器 URL 时,会收到以下错误:
原因: 未启动Microsoft Entra 应用程序代理连接器 服务。
解决方案:运行 services.msc,然后确保 Microsoft Entra 应用程序代理连接器 服务正在运行,并且 启动类型 设置为 “自动”。
HTTP 414 请求 URI 太长
浏览到 SCEP 服务器 URL 时,会收到以下错误: HTTP 414 Request-URI Too Long
原因:IIS 请求筛选未配置为支持 NDES 服务收到的长 URL(查询)。 配置用于 SCEP 基础结构的 NDES 服务时,将配置此支持。
解决方案:配置对长 URL 的支持。
在 NDES 服务器上,打开 IIS 管理器,选择“默认网站>请求筛选>编辑功能设置”以打开“编辑请求筛选设置”页。
配置下列设置:
- 最大 URL 长度 (字节) = 65534
- 最大查询字符串 (字节) = 65534
选择“确定”保存此配置并关闭 IIS 管理器。
通过查找以下注册表项来验证此配置,以确认其具有指示的值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
以下值设置为 DWORD 条目:
- 名称: MaxFieldLength,小数值为 65534
- 名称: MaxRequestBytes,小数值为 65534
重启 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 时,会收到以下错误:
原因 1:NDES 服务帐户被锁定或密码过期。
解决方案:解锁帐户或重置密码。
原因 2:MSCEP-RA 证书已过期。
解决方案:如果 MSCEP-RA 证书已过期,请重新安装 NDES 角色或请求新的 CEP 加密和 Exchange 注册代理(脱机请求)证书。
若要请求新证书,请执行以下步骤:
在证书颁发机构(CA)或颁发 CA 上,打开证书模板 MMC。 确保已登录的用户和 NDES 服务器具有 对 CEP 加密和 Exchange 注册代理(脱机请求)证书模板的读取 和 注册 权限。
检查 NDES 服务器上的过期证书,从证书复制 使用者 信息。
打开计算机帐户的证书 MMC。
展开“个人”,右键单击“证书”,然后选择“所有任务>请求新证书”。
在 “请求证书 ”页上,选择 “CEP 加密”,然后选择“ 注册此证书所需的详细信息”。单击此处配置设置。
在“证书属性”中,选择“使用者”选项卡,使用在步骤 2 期间收集的信息填充使用者名称,选择“添加”,然后选择“确定”。
完成证书注册。
打开“我的用户帐户的证书 MMC”。
注册 Exchange 注册代理(脱机请求)证书时,必须在用户上下文中完成。 由于此证书模板的使用者类型设置为“用户”。
展开“个人”,右键单击“证书”,然后选择“所有任务>请求新证书”。
在 “请求证书 ”页上,选择 Exchange 注册代理(脱机请求),然后选择 注册此证书所需的详细信息。单击此处配置设置。
在 “证书属性”中,选择 “使用者 ”选项卡,使用在步骤 2 期间收集的信息填充 使用者名称 ,然后选择“ 添加”。
选择 “私钥 ”选项卡,选择“ 使私钥可导出”,然后选择“ 确定”。
完成证书注册。
从当前用户证书存储导出 Exchange 注册代理(脱机请求)证书。 在“证书导出向导”中,选择“是” ,导出私钥。
将证书导入本地计算机证书存储。
在证书 MMC 中,对每个新证书执行以下操作:
右键单击证书,选择“所有任务>管理私钥”,向 NDES 服务帐户添加读取权限。
运行 iisreset 命令以重启 IIS。
后续步骤
如果设备成功到达 NDES 服务器来提供证书请求,下一步是查看 Intune 证书连接器策略模块。