安全的全自动部署
要查看哪些平台支持安全全自动部署 (SZTP),请转到 功能浏览器。在“功能浏览器”页面的 “探索功能 ”部分中,选择 “所有功能”。在 “按功能族分组的功能 ”框中,选择“安全 ZTP”。您也可以在 “搜索功能 ”编辑框中键入功能的名称。有关如何扩展 ZTP 支持的更多详细信息,请参阅本主题末尾的发布历史记录表。
概述
电话家庭客户端 (PHC) 进程支持安全全自动部署 (SZTP)。
您可以使用基于 RFC-8572 的 SZTP 引导处于出厂默认状态的远程网络设备。在配置远程网络设备之前,SZTP 允许在自举服务器和网络设备之间进行相互身份验证。
要启用相互身份验证,您需要唯一的数字凭证和 DevID(数字设备 ID 或加密数字身份)编程网络设备。DevID 嵌入在网络设备上的可信平台模块 (TPM) 2.0 芯片中。瞻博网络为每台符合条件的网络设备向客户发放数字代金券。
我们在管理和 WAN 接口上支持 SZTP。
基于 DHCP 的旧式 ZTP 将被禁用。在支持 SZTP 的硬件上不支持基于 DHCP 的旧式 ZTP。
SZTP 符合 RFC 8572 标准,并且需要以下基础架构来确保网络设备的身份和真实性:
受信任的平台模块 (TPM) 2.0
数字设备 ID (DevID)
DevID 证书
X.509 固定域证书 (PDC)
所有者证书
DevID 信任锚点
凭证
有关如何生成凭证的信息,请参阅 生成凭证证书。
要使用安全 ZTP 入网瞻博网络设备,请参阅 安全 ZTP 快速入门指南。
好处
您无需手动干预即可配置远程网络设备。
您可以从一个中心位置安全地配置网络设备,从而防止未经授权的实体控制您的网络设备。
重定向服务器和引导服务器会根据在网络设备的 TPM 中编程的 DevID 验证网络设备的真实性。
您的网络设备会根据设备的凭证验证重定向服务器和自举服务器以及自举信息的真实性。
用例
对于出厂时出厂的网络设备,您无需手动接触网络设备,即可安全地远程运行网络设备。网络设备需要能够使用动态主机配置协议 (DHCP) 获取网络连接信息并连接到远程自举服务器。
SZTP 要求
要在网络中部署 SZTP,您需要执行以下作:
部署 DHCP 和 DNS 服务器。
在 DHCP 服务器上配置 DHCP V4 选项 143 或 DHCP V6 选项 136,以便 DHCP 服务器可以播发重定向和引导服务器的名称。
部署重定向和引导服务器。
从瞻博网络获取 DevID 信任锚点。
为一台网络设备或一组网络设备生成所有者证书。
为每个网域生成固定域证书 (PDC)。
从瞻博网络获取考试券。
为每个网络设备生成重定向和引导信息。
使用重定向和自举服务器提供的重定向和引导信息来置备网络设备。
在网络中部署 SZTP 后,然后部署新的网络设备,网络设备将自动引导。
SZTP 基础架构组件
受信任的平台模块 (TPM) 2.0
TPM 是一种提供安全相关功能的微芯片。在制造过程中,瞻博网络使用数字设备 ID (DevID) 和非对称密钥对(公钥和私钥)对 TPM 进行编程。TPM 将非对称对的私钥锁定在防篡改位置。
DevID
DevID 对应私钥并保护私钥。需要签名或加密的应用程序使用 DevID 私钥。
在网络设备上运行的应用程序使用网络设备的 TPM 中的 DevID 私钥向远程验证程序证明网络设备的身份。
DevID 证书
瞻博网络为公钥生成与私钥的 DevID 相对应的 DevID 证书(X.509 证书)。DevID 证书包含为其创建 DevID 的网络设备的序列号。生成符合 IEEE 802.1AR 标准的 DevID 证书。
X.509 固定域证书 (PDC)
为每个网域创建一个 X.509 固定域证书 (PDC)。PDC 可以是根 CA 证书,也可以是中间 CA 证书。将 PDC 从可分辨编码规则 (DER) 转换为基数 64 编码。确保 PDC 是证书颁发机构 (CA) 并符合 X.509。
所有者证书
所有者证书用于验证购买或拥有网络设备的供应商。为每个网络设备或网络设备组生成一个非对称密钥对(公钥和私钥)。密钥对需要使用 Rivest-Shamir-Adleman (RSA) 或椭圆曲线加密 (ECC)。将私钥保存在安全的位置。固定域证书 (PDC) 应为所有者证书的 CA。
DevID 信任锚点
瞻博网络提供 DevID 信任锚点。在重定向和引导服务器中安装 DevID 信任锚点,以验证设备或客户端在建立 TLS 会话时提供的 DevID 证书。
优惠券证书
要接收凭证证书,请在瞻博网络敏捷许可 (JAL) 门户中输入 PDC 和网络设备的序列号。收到凭证证书后,请将其作为引导程序信息的一部分包含在引导服务器上。自举服务器会向您的网络设备提供凭证证书。然后,您的网络设备使用引导程序信息来验证重定向服务器提供的信任锚点。
有关如何接收凭证的分步说明,请参阅 生成凭证证书。
DevID 工作流
当应用程序需要使用 DevID 进行签名或加密时,应用程序将请求与引导服务器的 TLS 会话。
- 自举服务器向网络设备发送 TLS 响应,要求网络设备执行以下作:
- 提供其 DevID 证书
- 证明它有一个私钥
网络设备使用私钥的 DevID 对会话数据进行签名。
网络设备将数字签名和 DevID 证书发送到自举服务器。
- 自举服务器使用 DevID 证书验证数字签名。
自举服务器使用瞻博网络提供的 DevID 信任锚点来验证 DevID 证书。
入职信息
为了让网络设备能够自力更生并与其他系统建立安全连接,您需要提供上线信息。上线信息是网络设备用于引导自身并与其他系统连接的数据。当网络设备发送此数据时,需要采用符合 RFC 8572 的格式对数据进行编码。
启动映像信息
启动映像信息包括作系统的名称和作系统版本。建议将“Junos”指定为作系统版本。请确保指定正确的作系统版本,以防止网络设备连续下载和安装软件。
下载 URI
下载 URI 提供启动映像的位置。
图像验证
映像验证字段包括用于为软件映像生成安全散列的散列算法和软件映像的摘要值。SZTP 支持 SHA256。将摘要值编码为十六进制字符串。
配置处理
SZTP 可以合并或替换配置。在 XML 中创建配置,并将配置编码为 Base 64 格式。配置需要采用 Base 64 格式,以便自举服务器可以将其包含在其自举信息中。
升级前脚本
在预配设备之前,您可以执行升级前脚本来下载第三方应用程序的签名密钥或证书。
SZTP 支持 Bourne shell 脚本和 Python 脚本。Bourne shell 脚本解释器路径为 #!/bin/sh,Python 解释器路径为 #!/usr/bin/python。
如果脚本是 Bourne 脚本,则 SZTP 会检查脚本的最终值。如果脚本以非零值退出,则 SZTP 进程将重新启动。如果脚本是 Python 脚本,则 SZTP 不会检查脚本的最终值。即使脚本成功运行,脚本的输出也可能出现错误。
预配置脚本
SZTP 支持 Bourne shell 脚本和 Python 脚本。Bourne shell 脚本解释器路径为 #!/bin/sh,Python 解释器路径为 #!/usr/bin/python。
如果脚本是 Bourne 脚本,则 SZTP 会检查脚本的最终值。如果脚本以非零值退出,则 SZTP 进程将重新启动。如果脚本是 Python 脚本,则 SZTP 不会检查脚本的最终值。即使脚本成功运行,脚本的输出也可能出现错误。
下面是 XML 中的载入信息示例:
============================= <onboarding-information> <boot-image> <os-name>Junos</os-name> <os-version>22.2R1</os-version> <download-uri>https://example.com/path/to/image/file,https://example-1.com/path/to/image/file</download-uri> <image-verification> <hash-algorithm> </hash-algorithm> <hash-value>ba:ec:cf:a5:67:82:b4:10:77:c6:67:a6:22:ab:7d:50:04:a7:8b:8f:0e:db:02:8b:f4:75:55:fb:c1:13:b2:33</hash-value> </image-verification> </boot-image> <configuration-handling>merge</configuration-handling> <pre-upgrade-script>base64encodedvalue</pre-upgrade-script> <configuration>base64encodedvalue</configuration> <post-configuration-script>base64encodedvalue</post-configuration-script> </onboarding-information> =========================================
============================= <onboarding-information> <boot-image> <os-name>Junos</os-name> <os-version>22.2R1</os-version> <download-uri>https://example.com/path/to/image/file,https://example-1.com/path/to/image/file</download-uri> <image-verification> <hash-algorithm> </hash-algorithm> <hash-value>ba:ec:cf:a5:67:82:b4:10:77:c6:67:a6:22:ab:7d:50:04:a7:8b:8f:0e:db:02:8b:f4:75:55:fb:c1:13:b2:33</hash-value> </image-verification> </boot-image> <configuration-handling>merge</configuration-handling> <pre-upgrade-script>base64encodedvalue</pre-upgrade-script> <pre-configuration-script>base64encodedvalue</pre-configuration-script> <configuration>base64encodedvalue</configuration> <post-configuration-script>base64encodedvalue</post-configuration-script> </onboarding-information> =========================================
配置后脚本
预配置脚本要求也适用于配置后脚本。如果任何配置后脚本失败,设备将回滚到执行预配置脚本之前运行的配置。SZTP 进程将重新启动。
DHCP v4 选项 143
在 DHCP 服务器上配置 DHCP V4 option 143,然后它才能向 DHCP 客户端提供任何 IP 地址。
如果您将 MX 系列设备用作 DHCP 服务器,请启用 DHCP V4 Option 143。
下面是一个示例配置:
access { address-assignment { pool p1 { family inet { network 192.168.2.0/24; range r1 { low 192.168.2.2; high 192.168.2.254; } dhcp-attributes { maximum-lease-time 2419200; server-identifier 192.168.2.1; router { 192.168.2.1; } } option 143 hex-string 001368747470733a2f2f6578616d706c652e636f6d; } } }
DHCP v6 选项 135
下面是一个示例配置:
access { address-assignment { neighbor-discovery-router-advertisement p2; pool p2 { family inet6 { prefix 2001:db8:::/64; range r1 { low 2001:db8:::200/128; high 2001:db8:::299/128; } dhcp-attributes { dns-server { 2001:db8:::8888; } } option 135 hex-string 001a68747470733a2f2f6d782d7068732d736572766572362e6e6574; } } }
将十六进制格式转换为 ASCII 文本格式
例如,DHCP V6 Option 135 中的这个十六进制文本字符串在 ASCII 文本格式中等于 26 个字节。在十六进制格式中,26 表示为 001a。每个十六进制数字等于一个字节,每个字节等于 ASCII 字符的组合。
要将001a68747470733a2f2f6d782d7068732d736572766572362e6e6574十六进制字符串转换为 ASCII 字符,您需要将十六进制字母和数字映射到 ASCII 字母、数字和符号。
在此示例中,我们将映射用于 DHCP Option 135 的 URL。您可以对 DHCP Option 143 中使用的 URL 使用相同的过程。
下面是一个示例 URL,显示了十六进制格式和 ASCII 格式之间的映射。您可以看到,每个十六进制数字都映射到 ASCII 格式的字母和符号:
68(h) 74(t) 74(t) 70(p) 73(s) 3A(:) 2F(/) 2F(/) 61(a) 62(b) 2D(-) 63(c) 64(d) 65(e) 2D(-) 73(s) 65(e) 72(r) 76(v) 65(e) 72(r) 36(.) 2E (n)6E 65(e) 74(t)
最终 URL 为 https://ab-cde-server.net.
使用十六进制到 ASCII 转换器,反之亦然,以确保结果正确无误。
SZTP 工作流程
如果您的设备尚未处于出厂默认状态,请发出以下命令之一,使您的设备进入出厂默认状态。
在运行 Junos OS 的网络设备上,发出
request vmhost zeroize
命令。对于运行 Junos OS 演化版的网络设备,请发出
request system zeroize
命令。
当设备以出厂默认状态启动时,将发生以下事件。
DHCP 客户端向 DHCP 服务器发送请求,以获取自举服务器或客户重定向服务器的名称、IP 地址或主机名。
为 V4 配置 DHCP 选项 143,为 V6 配置 DHCP 选项 135。DHCP 客户端请求每个引导或重定向服务器的 IP 地址,直到设备完成引导。
DHCP 服务器将自举服务器或客户重定向服务器的服务器主机名发送到 DHCP 客户端。
设备上的 phone-home 客户端 (PHC) 会向它从 DHCP 选项获知的服务器发送引导请求。如果在 DHCP 选项中提供了多个服务器,设备将尝试按顺序使用每台服务器进行引导。
设备尝试使用 PHC 通过 DHCP 选项获知的任何自举、客户重定向或 DNS 服务器进行引导。设备会尝试以轮询方式引导至服务器,直到设备引导成功。
自举服务器会使用已签名的载入信息以及所有者证书和所有权凭证进行响应。
- PHC 使用所有者证书和所有权凭证中的信息来验证已签署的入职信息。
(选答)PHC 运行升级前脚本,这些脚本作为载入信息的一部分提供。
PHC 提取映像和配置信息。
如果设备运行的是其他映像,设备将下载该映像,使用新映像进行升级,然后使用新映像重新启动。
重新启动后,整个 SZTP 序列将重复,但设备不会重新启动,因为它已具有所需的映像。
(选答)PHC 运行预配置脚本。
SZTP 支持 Bourne 和 Python 脚本。
根据 RFC 8572 对预配置脚本和后配置脚本 XML 标记值进行编码。
PHC 提交配置。
(选答)PHC 运行配置后脚本。
PHC 向 PHS 发送引导完成消息。
设备会清理与 PHC 相关的配置和资源。
PHC 终止。
脚本类型 |
解释器路径 |
平台支持 |
---|---|---|
Shell 脚本 |
|
所有网络设备 |
Python 脚本 |
|
运行 Junos OS 的网络设备具有增强的自动化功能 运行 Junos OS 演化版的网络设备 |
适用于具有双路由引擎的网络设备的 SZTP
在运行 Junos OS 软件的网络设备上的备份路由引擎上升级软件之前,请在主路由引擎上的层次结构中[edit system]
启用该secure-ztp provision-backup-re
语句
在运行 Junos OS 软件的网络设备上,在[edit system]
主路由引擎上的层次结构上启用provision-backup-re
该语句,以便它可以引导备份路由引擎。
在运行 Junos OS 演化版软件的网络设备上,在层次结构中[edit system]
启用该auto-sw-sync
语句,以便主路由引擎通过升级或降级确保备份路由引擎上存在相同的映像版本。
在具有双路由引擎的基于 Junos OS 的系统上,即使主路由引擎已在运行所需的映像版本,主路由引擎也会下载映像。设备将下载映像,以便主路由引擎可在需要时升级备份路由引擎。
在基于 Junos OS 演化版的系统上,主路由引擎始终保留其正在运行的映像的副本。
如果尚未在[edit system]
层次结构中启用synchronize
语句或主路由引擎上的平滑重启引擎切换 (GRES),则主路由引擎不会将配置和状态同步到备份路由引擎。在此情况下,主路由引擎会先验证备份路由引擎的真实性,然后再将任何数据与备份路由引擎同步。
在主路由引擎调配备份路由引擎之前,主路由引擎会验证备份路由引擎的真实性。主路由引擎检查备份路由引擎的 DevID,确保备份路由引擎是瞻博网络授权的路由引擎。
主路由引擎不会检查备份路由引擎是否有权接收来自主路由引擎的信息。此外,备份路由引擎不会验证主路由引擎的真实性或授权。
在以下情况下,主路由引擎会配置备份路由引擎:
当主路由引擎使用 SZTP 引导时。
当备份路由引擎存在时,在 SZTP 进程期间引导或插入主路由引擎。
备份路由引擎重新启动或更换时。
主路由引擎验证备份路由引擎的真实性并满足调配要求后,主路由引擎将检查备份路由引擎上运行的软件版本。如果备份路由引擎的软件版本与主路由引擎的软件版本不同,则主路由引擎会将备份路由引擎升级到与主路由引擎运行的软件版本相同的软件版本。
当两个路由引擎运行相同的软件时,主路由引擎会将其配置与备份路由引擎同步。