在 Intune 中配置和使用导入的 PKCS 证书
Microsoft Intune 支持使用导入的公钥对 (PKCS) 证书,这些证书通常用于带有电子邮件配置文件的 S/MIME 加密。 Intune 中的某些电子邮件配置文件支持启用 S/MIME 的选项,你可以在其中定义 S/MIME 签名证书和 S/MIME 加密证书。
重要
如 本Microsoft技术社区博客中所述,对 Azure Active Directory 身份验证库 (ADAL) 的支持将于 2022 年 12 月结束。 若要使 PowerShell 脚本或自定义代码继续将用户 PFX 证书导入 Intune,必须更新它们以利用 Microsoft身份验证库 (MSAL) 。 此外,在 Entra ID 中注册全局 Intune 应用程序 ID 后,应使用分配给应用的唯一应用程序 (客户端 Microsoft) ID 更新全局 Intune 应用程序 ID,以防止将来出现身份验证问题。
在 GitHub 上,帮助简化 PFX 证书导入的示例 PowerShell 脚本已更新为引用 MSAL 和 Microsoft Entra 应用程序 (客户端) ID。 本文中的脚本示例也进行了更新(如果适用)。
有关详细信息,请查看 GitHub 上的 PFXImport PowerShell 项目 自述文件,并下载更新的示例脚本。
使用 S/MIME 进行加密会比较难,因为电子邮件是使用特定证书进行加密的:
- 你必须拥有对你阅读电子邮件的设备上的电子邮件加密的证书私钥,才可以对电子邮件进行解密。
- 你应在设备上的证书过期之前导入新证书,以便设备可以继续解密新电子邮件。 不支持续订这些证书。
- 加密证书会定期进行续订,这意味着你可能希望在设备上保留过去的证书,以确保可以继续解密旧的电子邮件。
由于需要跨设备使用相同的证书,因此无法使用 SCEP 或 PKCS 证书配置文件来实现此目的,因为这些证书传送机制针对每个设备提供独特的证书。
有关将 S/MIME 与 Intune 配合使用的详细信息,请参阅使用 S/MIME 对电子邮件进行加密。
支持的平台
Intune 支持为以下平台导入 PFX 证书:
- Android 设备管理员
- Android Enterprise:
- 完全托管
- 公司拥有的工作配置文件
- 个人拥有的工作配置文件
- iOS/iPadOS
- macOS
- windows 10/11
重要
Microsoft Intune 已于 2024 年 12 月 31 日终止对有权访问 Google 移动服务的设备上的 Android 设备管理员管理的支持, (GMS) 。 在此日期之后,设备注册、技术支持、bug 修复和安全修复将不可用。 如果当前使用设备管理员管理,建议在支持结束之前切换到 Intune 中的另一个 Android 管理选项。 有关详细信息,请参阅 在 GMS 设备上结束对 Android 设备管理员的支持。
要求
要在 Intune 中使用导入的 PKCS 证书,必须具有以下基础结构:
Microsoft Intune 证书连接器:
该证书连接器处理导入到 Intune 的 PFX 文件中的请求,以便为特定用户进行 S/MIME 电子邮件加密。 确保安装的每个连接器都有权访问用于对已上传的 PFX 文件的密码进行加密的私钥。
有关证书连接器的详细信息,请参阅:
Windows Server:
证书连接器安装在满足连接器先决条件的 Windows Server 上。
Visual Studio 2015 或更高版本(可选):
可以使用 Visual Studio 生成带有 cmdlet 的帮助程序 PowerShell 模块,以便将 PFX 证书导入 Microsoft Intune。 要获取帮助程序 PowerShell cmdlet,请参阅 GitHub 中的 PFXImport PowerShell Project。
如何工作
当使用 Intune 将导入的 PFX 证书部署到用户时,除了设备外,还有两个组件在运行:
Intune 服务:以加密状态存储 PFX 证书,并处理将证书部署到用户设备的操作。 在使用硬件安全模块 (HSM) 或 Windows 加密系统上传证书之前,对保护证书私钥的密码进行了加密,以确保 Intune 在任何时候都无法访问该私钥。
Microsoft Intune 证书连接器:设备请求导入到 Intune 的 PFX 证书时,系统会将加密的密码、证书和设备的公钥发送到该连接器。 连接器使用本地私钥对密码进行解密,然后在将证书发送回 Intune 之前,使用设备密钥重新对密码(以及使用 iOS 时的所有 plist 配置文件)加密。 然后,Intune 将证书传递到设备,设备用设备的私钥对证书进行解密,并安装证书。
将 PFX 证书导入到 Intune
使用 Microsoft Graph 将用户 PFX 证书导入到 Intune。 帮助程序 GitHub 上的 PFXImport PowerShell Project 提供了用于轻松完成操作的 cmdlet。
如果希望通过使用 Graph 使用自己的自定义解决方案,请使用 userPFXCertificate 资源类型。
生成“PFXImport PowerShell Project”cmdlet
要使用 PowerShell cmdlet,需使用 Visual Studio 自行生成项目。 此过程是直接的,虽然它可以在服务器上运行,但建议在工作站上运行。
转到 GitHub 上的 Intune-Resource-Access 存储库的根目录,然后使用 Git 将存储库下载或克隆到你的计算机。
转到
.\Intune-Resource-Access-develop\src\PFXImportPowershell\
并使用 Visual Studio 和 PFXImportPS.sln 文件打开项目。在顶部,从“调试”更改为“发布”。
转到“生成”,选择“生成 PFXImportPS”。 稍后,你将在 Visual Studio 的左下角看到 “生成成功 ”确认。
生成过程在
.\Intune-Resource-Access-develop\src\PFXImportPowershell\PFXImportPS\bin\Release
处使用 PowerShell 模块创建一个新文件夹。在接下来的步骤中,你将使用此“发布”。
创建加密公钥
将 PFX 证书及其私钥导入到 Intune。 使用本地存储的公钥对保护私钥的密码进行加密。 可以使用 Windows 加密、硬件安全模块或另一种加密方式生成并存储公钥/私钥对。 根据使用的加密类型,公钥/私钥对可以采用文件格式导出以进行备份。
PowerShell 模块提供了使用 Windows 加密创建密钥的方法。 你也可以使用其他工具创建密钥。
使用 Windows 加密创建加密密钥
将 Visual Studio 创建的“Release”文件夹复制到安装了 Microsoft Intune 证书连接器的服务器。 此文件夹包含 PowerShell 模块。
在服务器上,以管理员身份打开 PowerShell,然后导航到包含 PowerShell 模块的“发布”文件夹。
要导入模块,需要运行
Import-Module .\IntunePfxImport.psd1
以导入模块。接下来,运行
Add-IntuneKspKey -ProviderName "Microsoft Software Key Storage Provider" -KeyName "PFXEncryptionKey"
提示
当导入 PFX 证书时,必须再次选择你使用的提供程序。 你可以使用 Microsoft 软件密钥存储提供程序支持使用其他提供程序。 密钥名称也作为示例提供,你可以使用你选择的其他密钥名称。
如果计划从工作站导入证书,可以使用以下命令将此密钥导出到文件:
Export-IntunePublicKey -ProviderName "<ProviderName>" -KeyName "<KeyName>" -FilePath "<File path\Filename.PFX>"
必须在托管 Microsoft Intune 证书连接器的每个服务器上导入私钥,才能成功处理导入的 PFX 证书。
使用硬件安全模块 (HSM)
可以使用硬件安全模块 (HSM) 生成并存储公钥/私钥对。 有关详细信息,请参阅 HSM 提供商文档。
导入 PFX 证书
以下过程使用 PowerShell cmdlet 作为示例来说明如何导入 PFX 证书。 你可以根据自己的需求选择不同的选项。
选项包括:
预期目的(根据标记将证书分组在一起):
- 未分配
- smimeEncryption
- smimeSigning
填充方案:
- oaepSha256
- oaepSha384
- oaepSha512
选择与用于创建密钥的提供程序匹配的密钥存储提供程序。
导入 PFX 证书
按照以下提供商文档,从任何证书颁发机构 (CA) 导出证书。 对于 Microsoft Active Directory 证书服务,可以使用此示例脚本。
在服务器上,以管理员身份打开 PowerShell,然后转到包含 PowerShell 模块 IntunePfxImport.psd1 的“Release”文件夹。
注意
在运行 IntunePfxImport.psd1 之前,必须对 GCC High 和 DoD 租户进行以下更改。
使用文本编辑器或 PowerShell ISE 来编辑文件,这会更新 GCC High 环境的服务终结点。 请注意,这些更新会将 URI 的后缀 .com 更改为 .us 后缀。 IntunePfxImport.psd1 中总共有两个更新。 一个用于 AuthURI,另一个用于 GraphURI:
PrivateData = @{ AuthURI = "login.microsoftonline.us" GraphURI = "https://graph.microsoft.us" SchemaVersion = "beta" ClientId = "00000000-0000-0000-0000-000000000000" # Client Id from Azure app registration ClientSecret = "" # client secret from app registration when using application permissions to authenticate TenantId = "00000000-0000-0000-0000-000000000000" # TenantId is required when using client secret }
保存更改后,重启 PowerShell。
要导入模块,请运行
Import-Module .\IntunePfxImport.psd1
要向 Intune Graph 进行身份验证,请运行
Set-IntuneAuthenticationToken -AdminUserName "<Admin-UPN>"
注意
由于向 Graph 进行身份验证,因此你必须提供对 AppID 的权限。 如果是第一次使用此实用程序,则需要全局管理员权限。 PowerShell cmdlet 使用 PowerShell Intune 示例中所用的相同 AppID。
通过运行
$SecureFilePassword = ConvertTo-SecureString -String "<PFXPassword>" -AsPlainText -Force
,将每个正在导入的 PFX 文件的密码转换为安全字符串。要创建 UserPFXCertificate 对象,请运行
$userPFXObject = New-IntuneUserPfxCertificate -PathToPfxFile "<FullPathPFXToCert>" $SecureFilePassword "<UserUPN>" "<ProviderName>" "<KeyName>" "<IntendedPurpose>"
例如:
$userPFXObject = New-IntuneUserPfxCertificate -PathToPfxFile "C:\temp\userA.pfx" $SecureFilePassword "userA@contoso.com" "Microsoft Software Key Storage Provider" "PFXEncryptionKey" "smimeEncryption"
注意
当从安装了连接器的服务器之外的其他系统中导入证书时,必须使用包含密钥文件路径的以下命令:
$userPFXObject = New-IntuneUserPfxCertificate -PathToPfxFile "<FullPathToPFX>" $SecureFilePassword "<UserUPN>" "<ProviderName>" "<KeyName>" "<IntendedPurpose>" "<PaddingScheme>" "<File path to public key file>"
不支持 VPN 作为 IntendedPurpose。
通过运行
Import-IntuneUserPfxCertificate -CertificateList $userPFXObject
,将 UserPFXCertificate 对象导入到 Intune要验证证书是否已导入,请运行
Get-IntuneUserPfxCertificate -UserList "<UserUPN>"
作为清理Microsoft Entra 令牌缓存而不等待其自行过期的最佳做法,请运行
Remove-IntuneAuthenticationToken
有关其他可用命令的详细信息,请参阅 GitHub 上 的 PFXImport PowerShell Project 中的自述文件。
创建 PKCS 导入的证书配置文件
将证书导入 Intune 后,创建 PKCS 导入的证书 配置文件,并将其分配给Microsoft Entra 组。
注意
创建导入 PKCS 的证书配置文件后,配置文件中的“预期目的”和“密钥存储提供程序”(KSP) 的值都为只读,不能进行编辑。 如果需要为这些设置中的任何一个指定不同的值,请创建并部署一个新的配置文件。
选择并转到 “设备>管理设备>”“配置>创建”。
输入以下属性:
- 平台:选择设备平台。
- 配置文件:选择“PKCS 导入的证书”。 或者选择“模板”>“PKCS 导入的证书”。
选择“创建”。
在“基本信息”中,输入以下属性:
- 名称:输入配置文件的描述性名称。 为配置文件命名,以便稍后可以轻松地识别它们。 例如,配置文件名称最好是“整个公司的 PKCS 导入的证书配置文件”。
- 说明:输入配置文件的说明。 此设置是可选的,但建议进行。
选择 下一步。
在“配置设置”中,输入以下属性:
预期目的:指定为此配置文件导入的证书的预期目的。 管理员可以导入具有不同预期目的(如 S/MIME 签名或 S/MIME 加密)的证书。 证书配置文件中选择的预期目的将证书配置文件与正确的导入证书相匹配。 “预期目的”是一种将导入的证书分组在一起的标记,并不保证使用该标记导入的证书能满足预期目的。
密钥存储提供程序 (KSP):对于 Windows,请选择要将密钥存储在设备上的哪一位置。
此步骤仅适用于完全托管、专用和 Corporate-Owned 工作配置文件的 Android Enterprise 设备配置文件。
在 “应用”中,配置 “证书访问权限 ”以管理向应用程序授予证书访问权限的方式。 从以下项中进行选择:
- 要求用户批准 (默认) 的应用 – 用户必须批准所有应用程序使用证书。
- 以静默方式为特定应用授予 (要求用户批准其他应用) – 使用此选项时,选择“ 添加应用”,然后选择一个或多个无需用户交互即可以无提示方式使用该证书的应用。
选择 下一步。
在“分配”中,选择将接收配置文件的用户或组。 有关分配配置文件的详细信息,请参阅分配用户和设备配置文件。
选择 下一步。
(仅适用于 Windows 10/11)在“适用性规则”中,指定适用性规则以优化此配置文件的分配。 可以根据操作系统版本或设备版本来选择是否分配配置文件。
有关详细信息,请参阅“在 Microsoft Intune 中创建设备配置文件”中的适用性规则。
选择 下一步。
在“查看并创建”中查看设置。 选择“创建”时,将保存所做的更改并分配配置文件。 该策略也会显示在配置文件列表中。
支持第三方合作伙伴
以下合作伙伴提供了可用于将 PFX 证书导入到 Intune 的受支持的方法或工具。
DigiCert
如果使用 DigiCert PKI 平台服务,则可以使用适用于 Intune S/MIME 证书的 DigiCert 导入工具,将 PFX 证书导入到 Intune。 使用此工具,则无需按照本文前面所述将 PFX 证书导入到 Intune 部分中的说明进行操作。
若要详细了解 DigiCert 导入工具,以及如何获取该工具,请参阅 DigiCert 知识库中的 https://knowledge.digicert.com/tutorials/microsoft-intune.html。
EverTrust
如果将 EverTrust 用作 PKI 解决方案(独立或合并到现有 PKI),则可以配置 EverTrust Horizon 以将 PFX 证书导入到 Intune。 完成集成后,无需按照本文前面详细介绍的将 PFX 证书导入到 Intune 部分中的说明操作。
若要详细了解 EverTrust 与 Intune 的集成,请参阅 https://evertrust.fr/horizon-and-intune-integration/。
KeyTalk
如果使用 KeyTalk 服务,则可以配置服务来将 PFX 证书导入到 Intune。 完成集成后,无需按照本文前面详细介绍的将 PFX 证书导入到 Intune 部分中的说明操作。
若要详细了解 KeyTalk 与 Intune 的集成,请参阅 KeyTalk 知识库中的 https://keytalk.com/support。
后续步骤
Intune UI 将 Windows Server 设备显示为不同于适用于 Microsoft Defender for Endpoint 方案的安全管理的 Windows 客户端
为了支持 Microsoft Defender for Endpoint (MDE 安全配置) 方案的安全管理,Intune 将很快将Microsoft Entra ID 中的 Windows 设备区分为运行 Windows Server 的设备, 或者将 Windows 区分为运行 Windows 10 或 Windows 11 的设备。
通过此更改,你将能够改进 Microsoft Defender for Endpoint 安全配置的策略目标。 例如,你将能够使用仅包含 Windows Server 设备的动态组,或者仅使用 Windows 10/11) (Windows 客户端设备。