Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 

签名第三方应用程序,以在不断发展Junos OS本地运行

签名密钥概述

从Junos OS演化版20.1R1开始,您可以生成签名密钥并使用它们来签名可执行文件或共享对象。对可执行文件进行签名可授予其在设备上运行的权限,从而允许您批准可信应用程序与经授权的软件瞻博网络运行。

Junos OS Evolved 要求用户签名将映射到内存以执行的所有文件。其中包括以下文件类型:

  • 可执行文件和可链接格式 (ELF) 文件

  • 共享对象 (.so) 文件

以下类型的文件无需签名:

  • Docker 容器

  • 容器中的应用程序

  • 脚本

    注意:

    虽然脚本无需签名,但需要通过经过签名的解释器执行。Junos OS Evolved 随附了经过签名的 Python 2 和 Python 3 解释器,可通过 shell 命令 python script-name 使用。

签名密钥由称为完整性测量架构 (IMA) 的 Linux 子系统控制。IMA 策略包括一些规则,这些规则定义了在执行文件之前需要采取的操作。IMA 测量策略将测量并存储文件的哈希,IMA 评估策略将确保文件具有有效的哈希或数字签名。只有此验证成功后,IMA 才允许运行文件。有关 IMA 的信息,请参阅 使用 IMA 保护 Junos OS的完整性

签名密钥存储在系统密钥 存储中,而证书使用验证签名密钥是否存储在 IMA 扩展密钥中。继续阅读,了解如何生成、导入、查看和使用签名密钥。

生成签名密钥

可通过 OpenSSL 命令行或 OpenSSL 配置文件生成密钥。

使用 OpenSSL 命令行生成签名密钥

以下示例 OpenSSL 命令可用于生成签名密钥:

此命令将生成 2 个文件:

  1. privkey.pem - PEM 编码的私钥,可用于对可执行文件进行签名。

  2. ima-cert.x509 - 要加载到 IMA 扩展密钥中的 DER 编码证书。

注意:

OpenSSL 命令行的功能有限。不允许为 X509v3 扩展设置值。使用上述命令生成的所有密钥均可用于证书颁发机构 (CA),因此可用于签署其他证书。为了防止这种情况发生,我们可以使用 OpenSSL 配置文件。

使用 OpenSSL 配置文件生成签名密钥

创建名为 的文件 ima-x509.cnf ,粘贴以下内容:

创建配置文件之后,使用以下 OpenSSL 命令创建 ima-privkey.pemima-cert.x509 文件:

私钥文件 ima-privkey.pem 用于生成签名密钥,证书文件 ima-cert.x509 用于验证签名。在将签名密钥导入系统密钥存储库和 IMA 扩展密钥的过程期间,会使用这两个文件。

将签名密钥导入系统密钥库和 IMA 扩展密钥

使用之前,需要将签名密钥导入系统密钥库。导入系统密钥存储的密钥会自动导入 IMA 扩展密钥中。

要将签名密钥导入系统密钥存储,请使用 request security system-keystore import 命令以及以下 3 个必需参数:

  1. key-name - 密钥的唯一名称

  2. private-key - 通往私钥文件的路径

  3. x509-cert - 到 DER 编码证书文件的路径

以下示例命令将创建一个使用私钥文件和证书文件命名 ima-test-key ima-privkey.pem 的密钥 ima-cert.x509

将密钥成功导入 中后,将看到上述输出显示密钥名称、磁盘中私钥和证书的路径以及密钥的主题密钥标识符 system-keystore (一种)。您可以使用以下命令检查此成功加载到 IMA 的密钥是否与该成功密钥匹配 扩展密钥:

查看系统密钥库和 IMA 扩展密钥

您可查看系统密钥库以及 IMA 通过不断演进的源命令Junos OS密钥CLI show 内容。

使用 show security integrity system-keystore 命令查看系统密钥库中的可用签名密钥:

Key KEYS 字段中的信息可用于将这些密钥映射到 IMA 扩展密钥。

使用 show security integrity extended-keyring 命令查看 IMA 扩展密钥的内容:

如何签名应用程序

将签名密钥导入系统密钥库后,可用于对可执行二进制文件进行签名。

使用 request security integrity measure file filename key key-name 命令对文件进行签名。

以下示例命令显示由名为 的键 ima-test 签名的文件 ima-test-key

您可以使用 命令验证文件是否成功签名 request security integrity appraise file filename key key-name ,如下所示:

如果文件未正确签名,将显示以下消息:

对文件进行签名后,可在您的已演化Junos OS本地运行。

如何运行已签名的应用程序

在尝试执行尚未签名的文件时,您可能会 Permission Denied 出错:

成功签名文件后,可以在文件名前面添加前缀,从 shell 提示符 ./ 执行该文件: