适用于: IoT Edge 1.5
重要
IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是较低的版本,请参阅更新 IoT Edge。
受信任的平台模块 (TPM) 芯片是一种安全加密处理器,用于执行加密作。 此技术提供基于硬件的安全功能。 Windows 上的 Azure IoT Edge for Linux (EFLOW) 虚拟机没有附加虚拟 TPM。 但是,可以启用或禁用 TPM 直通功能,该功能允许 EFLOW 虚拟机使用 Windows 主机 OS TPM。 使用 TPM 直通功能可以:
- 使用 TPM 技术通过设备预配服务 (DPS) 进行 IoT Edge 设备预配
- 获取对存储在 TPM 中的加密密钥的只读访问权限
本文介绍如何编写示例 C# 代码来读取存储在设备 TPM 中的加密密钥。
重要
对 TPM 密钥的访问仅限于只读。 若要将密钥写入 TPM,请从 Windows 主机 OS 执行此作。
先决条件
带有 TPM 或 vTPM 的 Windows 主机 OS(如果使用 Windows 主机 OS 虚拟机)。
已启用 TPM 直通的 EFLOW 虚拟机。 在提升的 PowerShell 会话中,运行
Set-EflowVmFeature -feature "DpsTpm" -enable
启用 TPM 直通。 有关详细信息,请参阅 Set-EflowVmFeature 以启用 TPM 直通。确保 NV 索引(默认索引=3001)使用 8 字节的数据进行初始化。 示例使用的默认 AuthValue 为 {1,2,3,4,5,6,7,8},它在写入 TPM 时匹配 TSS.MSR 库中的 NV (Windows) 示例。 在从 EFLOW VM 读取之前初始化 Windows 主机上的所有索引。 有关 TPM 示例的详细信息,请参阅 TSS.MSR。
警告
对虚拟机启用 TPM 直通可能会增加安全风险。
创建 dTPM 可执行文件
按照以下步骤创建示例可执行文件,以从 EFLOW VM 访问 TPM 索引。 有关 EFLOW TPM 直通的详细信息,请参阅 Azure IoT Edge for Linux on Windows 安全性。
打开 Visual Studio 2019 或 2022。
选择“创建新项目”。
在模板列表中选择 控制台应用 ,然后选择“ 下一步”。
填写项目名称、位置和解决方案名称字段,然后选择“下一步”。
选择目标框架。 首选最新的 .NET 6.0 LTS 版本。 选择目标框架后,选择“ 创建”。 Visual Studio 创建新的控制台应用解决方案。
在“解决方案资源管理器”中,右键单击项目名称,然后选择“管理 NuGet 包”。
选择 “浏览”,然后搜索
Microsoft.TSS
。 有关此包的详细信息,请参阅 Microsoft.TSS。从列表中选择 Microsoft.TSS 包,然后选择“ 安装”。
编辑 Program.cs 文件,并将内容替换为 EFLOW TPM 示例代码 - Program.cs。
选择“生成”“生成解决方案”以生成此项目。 验证生成是否成功。
在 解决方案资源管理器中,右键单击该项目,然后选择“ 发布”。
在“发布”向导中,选择“文件夹”“文件夹”。 选择 “浏览”,然后选择要生成的可执行文件的输出位置。 选择“完成”。 创建发布配置文件后,选择“关闭”。
在“发布”选项卡上,选择“显示所有设置”链接。 更改以下配置,然后选择“保存”。
- 目标运行时:linux-x64。
- 部署模式:自包含。
选择 “发布”,然后等待创建可执行文件。
如果发布成功,则输出文件夹中会显示新文件。
复制并运行可执行文件
创建可执行文件和依赖项文件后,需要将文件夹复制到 EFLOW 虚拟机。 以下步骤演示如何复制所有必要文件以及如何在 EFLOW 虚拟机中运行可执行文件。
使用“以管理员身份运行”启动提升的 PowerShell 会话。
将目录更改为包含已发布文件的父文件夹。 例如,如果已发布文件位于 目录中的文件夹 TPM 下。 可以使用以下命令更改为父文件夹。
cd "C:\Users\User"
创建一个 tar 文件,其中包含前面步骤中创建的所有文件。 例如,如果文件夹 TPM 下包含所有文件,可以使用以下命令创建 TPM.tar 文件。
tar -cvzf TPM.tar ".\TPM"
成功创建 TPM.tar 文件后,使用 cmdlet 将创建的 tar 文件复制到 EFLOW VM。 例如,如果目录 中有 tar 文件名 TPM.tar。 可以使用以下命令复制到 EFLOW VM。
Copy-EflowVmFile -fromFile "C:\Users\User\TPM.tar" -toFile "/home/iotedge-user/" -pushFile
连接到 EFLOW 虚拟机。
Connect-EflowVm
将目录更改为复制 tar 文件的文件夹,并检查该文件是否可用。 如果使用了前面的示例,那么当您连接到 EFLOW VM 时,您会发现自己已经位于 iotedge-user 根文件夹中。 运行命令
ls
列出文件和文件夹。运行以下命令,从 tar 文件中提取所有内容。
tar -xvzf TPM.tar
提取后,应会看到包含所有 TPM 文件的新文件夹。
将目录切换到 TPM 文件夹。
cd TPM
向主可执行文件添加可执行权限。 例如,如果项目名称为 TPMRead,则主可执行文件名为 TPMRead。 运行以下命令,使其成为可执行文件。
chmod +x TPMRead
若要解决 ICU 全球化问题,请运行以下命令。 例如,如果项目名称为 TPMTest,则运行:
sed -i '/"configProperties": /a \\t"System.Globalization.Invariant\": true,' TPMTest.runtimeconfig.json
最后一步是运行可执行文件。 例如,如果项目名称为 TPMTest,请运行以下命令:
./TPMTest
此时会看到类似下面的输出。
后续步骤
了解如何在 Windows 上使用适用于 Linux 的 IoT Edge 通过 Linux 容器开发 IoT Edge 模块。