Device Guard 签名

适用于

  • Windows 10

重要

适用于企业的 Microsoft Store 和 适用于教育的 Microsoft Store 将于 2023 年第一季度停用。 在此之前,你可以继续使用免费应用的当前功能。 有关此更改的详细信息,请参阅发展 适用于企业的 Microsoft Store 和 适用于教育的 Microsoft Store

重要

我们将引入新版本的 Device Guard 签名服务 (DGSS) 更加自动化友好。 新版 DGSS v2 (现在) 新版本。 正如前面所述,你将在 2021 年 6 月 9 日前过渡到 DGSS v2。 2021 年 6 月 9 日,当前版本的 DGSS 服务的现有基于 Web 的机制将停用,并且不再可用。 请制定计划,在 2021 年 6 月 9 日之前迁移到服务的新版本。

以下是我们对服务进行的主要更改:

  • 使用服务的方法将更改为基于 PowerShell cmdlet 的更自动化友好方法。 这些 cmdlet 可供下载NuGet下载 https://www.nuget.org/packages/Microsoft.Acs.Dgss.Client/
  • 为了实现所需的隔离,你需要从 DGSS v2 应用程序获取新的 CI 策略 (并选择性地) 。
  • DGSS v2 不支持下载用于对文件进行签名的叶证书 (但是,根证书仍可供下载) 。 请注意,用于对文件进行签名的证书可以轻松从已签名文件本身中提取。 因此,DGSS v1 停用后,你将不再能够下载用于对文件进行签名的叶证书。

以下功能将可通过以下 PowerShell cmdlet 获得:

  • 获取 CI 策略
  • 签署 CI 策略
  • 签署目录
  • 下载根证书
  • 签名操作下载历史记录

如果有任何疑问,请通过联系我们 DGSSMigration@microsoft.com。

Device Guard 签名是一项 Device Guard 功能,为管理员提供了一个对目录文件和代码完整性策略进行签名的位置。 在管理员针对未签名的应用创建目录文件并签署这些目录文件后,他们可以将签署人添加到代码完整性策略。 你可以将代码完整性策略与现有策略合并以包含自定义签名证书。 这允许你信任目录文件。

Device Guard 是由硬件和软件系统完整性强化功能组成的功能集。 这些功能使用新的基于虚拟化的安全选项和不信任任何内容的移动设备操作系统模型。 本模型中的主要功能称为可配置的代码完整性,这允许你的组织精确选择允许哪些软件或受信任的软件发布者在你的客户端计算机上运行代码。 此外,Device Guard 为组织提供一种对现有业务线 (LOB) 应用程序进行签名的方式,以便它们可以信任自己的代码,而无需重新打包应用程序。 这一相同的签名方法还允许组织信任个别第三方应用程序。 有关详细信息,请参阅 Device Guard 部署指南

本节内容

主题 描述
将未签名的应用添加到代码完整性策略 在你想要将未签名的应用添加到代码完整性策略时,需要从引用设备创建的代码完整性策略开始。 然后,针对未签名的应用创建目录文件、签署目录文件,然后将包括签名证书的默认策略与现有代码完整性策略合并。
通过 Device Guard 签名签署代码完整性策略 对代码完整性策略进行签名可使其在部署后免遭篡改。 你可以使用 Device Guard 签名门户对代码完整性策略进行签名。

Device Guard 签名服务 (v2) PowerShell 命令

备注

[.. common ..]参数通用于命令定义下记录的所有命令。

Get-DefaultPolicy 获取与.xml关联的默认策略文件。

  • 用法:

    Get-DefaultPolicy -OutFile filename [-PassThru] [.. common ..]
    
  • 参数:

    OutFile - string,mandatory - 默认策略文件应保留到磁盘的文件名。 文件名应为一个.xml文件。 如果文件已存在,则该文件将被覆盖 (注意:先创建文件夹) 。

    PassThru - switch,可选 - 如果存在,则返回返回默认策略文件的 XmlDocument 对象。

  • 命令运行时间:

    平均运行时间低于 20 秒,但可能最多为 3 分钟。

Get-RootCertificate 获取当前租户的根证书。 所有验证码和策略签名证书最终将链接至此根证书。

  • 用法:

    Get-RootCertificate -OutFile filename [-PassThru] [.. common ..]
    
  • 参数:

    OutFile - string,mandatory - 根证书文件应保留到磁盘的文件名。 文件名应为 .cer 文件。 如果文件已存在,则该文件将被覆盖 (注意:首先创建文件夹) 。

    PassThru - switch,可选 - 如果存在,则返回返回默认策略文件的 X509Certificate2 对象。

  • 命令运行时间:

    平均运行时间低于 20 秒,但可能最多为 3 分钟。

Get-SigningHistory 获取当前租户签名的最新 100 个文件的信息。 结果作为集合返回,其中元素按反向时间顺序 (最新到最近的) 。

  • 用法:

    Get-SigningHistory -OutFile filename [-PassThru] [.. common ..]
    
  • 参数:

    OutFile - string, mandatory - 签名历史记录文件应保留到磁盘的文件名。 文件名应为一个.xml文件。 如果文件已存在,则该文件将被覆盖 (注意:先创建文件夹) 。

    PassThru - switch,可选 - 如果存在,则返回返回 XML 文件的 XML 对象。

  • 命令运行时间:

    平均运行时间低于 10 秒。

Submit-SigningJob 将文件提交到服务进行签名和时间戳。 该模块支持验证码签名的有效文件类型为目录文件 (.cat) 。 策略签名的有效文件类型是扩展名为 (.bin) 通过 ConvertFrom-CiPolicy cmdlet 创建的二进制策略文件。 否则,可能无法正确部署二进制策略文件。

  • 用法:

    Submit-SigningJob -InFile filename -OutFile filename [-NoTimestamp][- TimeStamperUrl "timestamper url"] [-JobDescription "description"] [.. common ..]
    
  • 参数:

    InFile - string, mandatory - 要签名的文件。 这应该是上述说明中所述类型的文件 (.cat .bin) 。

    OutFile - string,mandatory - 签名过程应生成的输出文件。 如果此文件已存在,将覆盖它。 (注意:先创建文件夹)

    NoTimestamp - switch,可选 - 如果存在,签名操作将跳过输出文件的时间戳,并且只会进行签名。 如果不存在 (和 timeStamperUrl) ,则输出文件将进行签名和时间戳。 如果 NoTimestamp 和 TimeStamperUrl 不存在,则签名操作将跳过输出文件的时间戳,并且只会对该文件进行签名。

    TimeStamperUrl - string,可选 - 如果此值无效, (不存在 NoTimestamp,) 将引发异常。 若要了解有关时间戳的更多信息,请参阅 时间戳

    JobDescription - string,可选 - 此提交的简短 (< 100) ,可读说明。 如果脚本是作为自动生成的一部分调用的,则代理可能希望传递此字段的版本号或变更集编号。 此信息将作为命令结果的一Get-SigningHistory提供。

Submit-SigningV1MigrationPolicy 将文件提交到服务进行签名和时间戳。 策略签名的唯一有效文件类型是扩展名为 (.bin) 的二进制策略文件,这些文件是通过 ConvertFromCiPolicy cmdlet 创建的。 否则,可能无法正确部署二进制策略文件。 注意:仅适用于 V1 迁移。

  • 用法:

    Submit-SigningV1MigrationPolicy -InFile filename -OutFile filename [-NoTimestamp][-TimeStamperUrl "timestamper url"] [-JobDescription "description"] [.. common ..]
    
  • 参数:

    InFile - string, mandatory - 要签名的文件。 这应该是上述 (.bin 文件中描述的) 。

    OutFile - string,mandatory - 签名过程应生成的输出文件。 如果此文件已存在,将覆盖它。

    备注

    首先创建文件夹。

    NoTimestamp - switch,可选 - 如果存在,签名操作将跳过输出文件的时间戳,并且只会进行签名。 如果不存在 (和 timeStamperUrl) ,则输出文件将进行签名和时间戳。 如果 NoTimestamp 和 TimeStamperUrl 不存在,则签名操作将跳过输出文件的时间戳,并且只会对该文件进行签名。

    TimeStamperUrl - string,可选 - 如果此值无效, (不存在 NoTimestamp,) 将引发异常。 若要了解有关时间戳的更多信息,请参阅 时间戳

    JobDescription - string,可选 - 此提交的简短 (< 100) ,可读说明。 如果脚本作为自动生成过程的一部分调用,则代理可能希望传递此字段的版本号或变更集编号。 此信息将作为命令结果的一Get-SigningHistory提供。

  • 命令运行时间:

    平均运行时间低于 20 秒,但可能最多为 3 分钟。

通用参数 [.. common ..]

除了 cmdlet 特定的参数之外,每个 cmdlet 还了解以下通用参数。

  • 用法:

    ... [-NoPrompt] [-Credential $creds] [-AppId AppId] [-Verbose]
    
  • 参数:

    NoPrompt - switch,可选 - 如果存在,指示脚本在无头环境中运行,并且应抑制所有 UI。 如果 UI 必须 (,例如,对于设置) 时显示的身份验证,操作将失败。

    Credential + AppId - PSCredential - 登录凭据 (用户名和密码) AppId。

文件和大小限制

在上载文件以供 Device Guard 签名时,对文件和文件大小有以下一些限制:

描述 限制
策略或目录文件的最大大小 3.5 MB
多个文件的最大大小(在一个组中上传) 4 MB
每次上载的最大文件数 15 个文件

文件类型

目录和策略文件具有所需文件类型。

文件 所需文件类型
目录文件 .cat
策略文件 .bin

适用于企业的 Microsoft Store 的角色和权限

对代码完整性策略进行签名,需要 Device Guard 签名者角色才能访问 Device Guard 门户。

Device Guard 签名证书

Device Guard 签名服务生成的所有证书对每个使用者而言都是独一无二的,并且独立于 Microsoft 生产代码签名证书颁发机构。 所有的证书颁发机构 (CA) 密钥均存储在联邦信息处理标准 (FIPS) 发布 140-2 兼容的硬件安全模块的加密边界中。 初始生成后,根证书密钥和顶级 CA 密钥将从在线签名服务删除、进行加密并离线存储。