基于传输层安全的 NETCONF 会话 (TLS)
总结 网络配置协议 (NETCONF) 客户端可以使用具有基于 X.509 证书的交互身份验证的传输层安全 (TLS) 协议,与受支持的 Junos 设备建立 NETCONF 会话。
了解 NETCONF-over-TLS 连接
NETCONF 比 TLS 的优势
-
使用基于证书的交互身份验证实现设备远程管理
-
与通过 SSH 使用 NETCONF 相比,您能够更轻松地管理规模更大的网络
-
使用公钥基础架构为客户端和服务器提供基于 TLS 证书的交互身份验证
-
保护 NETCONF 消息的连接和交换
-
确保交换消息的数据完整性
基于 TLS 的 NETCONF 概述
您可以在某些 Junos 设备上通过传输层安全 (TLS) 建立网络配置协议 (NETCONF) 会话,以取代通过 SSH 建立 NETCONF 会话。TLS 是一种使用基于证书的交互身份验证的密码协议,可在两台设备之间提供安全可靠的连接。它是安全套接字层 (SSL) 协议的继任者。通过 TLS 建立 NETCONF 会话时,NETCONF 服务器充当 TLS 服务器,而 NETCONF 客户端则充当 TLS 客户端。
基于 TLS 的 NETCONF 会话比使用 SSH 的会话具有一些优势。SSH 使用凭据(用户名和密码)或密钥对客户端进行身份验证,而 TLS 则使用证书对客户端和服务器进行相互验证。证书可以提供有关客户端的更多信息,并且可用于将一台设备安全地验证到另一台设备。因此,虽然通过 SSH 进行的 NETCONF 会话适用于手动管理单个设备,但使用 TLS 的 NETCONF 会话可以实现安全的设备到设备通信,从而更好地管理和自动化大规模网络中的设备。
具有 Junos 设备的 NETCONF-over-TLS 会话具有以下要求:
-
支持 TLS 1.2 版的 NETCONF 客户端
-
服务器和客户端必须具有由证书颁发机构签署的 X.509 公钥证书
-
Junos 公钥基础架构 (PKI) 必须加载相应的本地和 CA 证书
-
Junos 设备为通过 TLS 的 NETCONF 配置,并为客户端定义默认或特定的证书到 NETCONF 用户名映射
-
NETCONF 用户名与有效的 Junos OS 用户帐户对应
TLS 使用 X.509 数字证书进行服务器和客户端身份验证。数字证书是通过受信任的第三方(称为 证书颁发机构 (CA) 来验证您的身份的一种电子手段。证书颁发机构颁发数字证书,该证书可用于通过证书验证在两个端点之间建立安全连接。X.509 标准定义了证书的格式。要在受支持的 Junos 设备上通过 TLS 建立 NETCONF 会话,服务器和客户端都必须具有有效的 X.509 证书,并且证书必须由 CA 签名。自签名证书不能用于通过 TLS 建立 NETCONF 会话。
Junos OS PKI 提供用于数字证书管理的基础架构。要建立 TLS 连接,必须在 Junos OS PKI 中安装以下内容:
-
NETCONF 服务器的本地证书及其中间 CA 证书
注意:如果服务器证书链不包含中间 CA,则必须配置根 CA 证书。
-
验证 NETCONF 客户端证书或证书链所需的 NETCONF 客户端根 CA 证书
服务器验证客户端的身份并建立 TLS 连接后,必须先派生该客户端的 NETCONF 用户名,然后才能建立 NETCONF 会话。NETCONF 用户名是 Junos 用户帐户,其访问权限和权限将执行 NETCONF 操作。您可以配置客户端证书到 NETCONF 用户名映射列表,也可以配置默认的 NETCONF 用户名映射。当客户端证书与任何配置的客户端不匹配时,Junos OS 会使用默认映射。如果服务器提取了有效的 NETCONF 用户名,则会建立 NETCONF 会话。有关派生 NETCONF 用户名的更多信息,请参阅 了解 TLS 客户端到 NETCONF 用户名映射。
Junos 进程 tls 代理处理 TLS 连接。它会执行 TLS 握手,对流量进行加密和解密,确定 NETCONF 用户名,以及获取 NETCONF 用户的授权参数。tls 代理进程与管理流程 (mgd) 协同工作,以创建和管理 NETCONF 会话。NETCONF-over-TLS 会话工作流程在 NETCONF-over-TLS 连接工作流程中概述了。
有关基于 TLS 的 NETCONF 的更多信息,请参阅 RFC 7589, 通过传输层安全使用 NETCONF 协议 (TLS) 和交互 X.509 身份验证。
有关传输层安全协议的更多信息,请参阅 RFC 5246, 传输层安全 (TLS) 协议版本 1.2。
了解 TLS 客户端到 NETCONF 的用户名映射
NETCONF-over-TLS 客户端的已身份验证身份为 NETCONF 用户名。Junos 设备在此用户的帐户权限下执行 NETCONF 操作。您可以配置用于为个别客户端派生 NETCONF 用户名的方法,也可以定义一个默认方法,为与配置的客户端不匹配的客户端派生 NETCONF 用户名。
您可以在层次结构级别配置客户端证书与 NETCONF 用户名的 [edit system services netconf tls client-identity]
映射。您可以为每个客户端配置证书指纹和映射类型。如果客户端证书的指纹与配置的指纹匹配,Junos OS 将使用相应的映射类型来派生 NETCONF 用户名。每个客户端只能配置一个指纹,并且每个客户端的指纹必须唯一。例如:
netconf { tls { client-identity client1 { fingerprint 04:D2:96:AF:89:AB:33:A4:F9:5C:0F:34:9E:FC:67:2D:98:C6:08:9B:E8:6C:DE:63:60:1C:F6:CD:1A:43:5A:30:AD; map-type specified; username netconf-user; } client-identity client2 { fingerprint 04:95:71:45:4F:56:10:CA:B1:89:A3:8C:5D:89:CC:BD:01:37:03:EC:B5:4A:55:22:AD:49:DA:9B:D8:8B:3A:21:12; map-type san-dirname-cn; } } }
配置的证书指纹使用 RFC 7407( 用于 SNMP 配置的 YANG 数据模型)中定义的 x509c2n:tls 指纹格式。在这种格式中,第一个八位位组是散列算法标识符,其余八位位组是散列算法的结果。此处显示的散列算法标识符供参考,在 RFC 5246, 传输层安全 (TLS) 协议 1.2 版中定义。
-
md5:1
-
sha1: 2
-
sha224: 3
-
sha256: 4
-
sha384: 5
-
sha512: 6
您还可以在 [edit system services netconf tls default-client-identity]
层次结构级别上为 NETCONF 用户名配置默认映射。如果客户端证书的指纹与任何配置的客户端不匹配,Junos 设备将使用默认映射类型派生 NETCONF 用户名。
Junos 设备支持以下映射类型:
-
san-dirname-cn
- 使用为客户端证书中为 SubjectAltName (SAN) DirName 字段 () 定义的通用名称 (DirName:/CN
CN) 作为 NETCONF 用户名。 -
specified
-使用在同一层级的username
语句中定义的 NETCONF 用户名。
服务器验证客户端身份并建立 TLS 连接后,会派生 NETCONF 用户名。它首先将每个配置的客户端的指纹与所呈现证书的指纹进行匹配。如果有匹配项,则使用相应的映射类型派生 NETCONF 用户名。如果配置的指纹与客户端证书的指纹不匹配,将使用默认映射类型派生 NETCONF 用户名。
服务器确定用户名后,会在本地或远程获取用户的授权。用户名必须在设备上本地定义,或者由轻量级目录访问协议 (LDAP) 服务器进行身份验证,然后服务器将其映射到 Junos 设备上本地定义的用户模板帐户。如果提取的用户名不是有效的本地或远程用户,则 TLS 连接将终止。
NETCONF-over-TLS 连接工作流程
Junos 设备充当 TLS 和 NETCONF 服务器。服务器侦听 TCP 端口 6513 上的传入 NETCONF-over-TLS 连接。NETCONF 客户端(也是 TLS 客户端)会与该端口上的服务器建立连接。
客户端和服务器请执行以下操作,以建立和利用 TLS 的 NETCONF 会话:
-
客户端发送 TLS ClientHello 消息以发起 TLS 握手。
-
服务器会发送一条 ServerHello 消息、服务器证书链以及一条证书请求消息,从客户端请求证书。
-
客户端验证服务器的身份并发送客户端证书链。
-
服务器使用已在服务器上预配置的客户端根 CA 验证客户端证书链。
-
服务器为该客户端派生 NETCONF 用户名。
-
如果 NETCONF 用户名有效,服务器将启动 NETCONF 会话,服务器和客户端交换 NETCONF
<hello>
消息。 -
客户端使用 NETCONF 用户的访问权限和权限执行 NETCONF 操作。
-
客户端执行
<close-session>
操作以结束 NETCONF 会话,随后关闭 TLS 连接。
在以下情况下,服务器无法通过 TLS 建立 NETCONF 会话:
-
服务器或客户端证书已过期或已自签名。
-
客户端不提供证书。
-
客户端不会发送其中间 CA 证书。
-
服务器上未配置客户端的根 CA 证书。
-
服务器不能将客户端证书映射到已配置或默认的映射类型来派生 NETCONF 用户名。
-
服务器使用
san-dirname-cn
映射类型派生客户端的 NETCONF 用户名,但客户端的证书不会在相应字段中指定用户名。
另请参阅
如何通过 TLS 建立 NETCONF 会话
网络管理系统 (NMS) 用于远程管理 Junos 设备。您可以通过网络管理系统与支持的 Junos 设备之间的 TLS 建立 NETCONF 会话。NMS 是 NETCONF 和 TLS 客户端,Junos 设备是 NETCONF 和 TLS 服务器。
客户端和服务器可以通过 TLS 建立 NETCONF 会话之前,您必须满足以下部分讨论的要求:
- 在网络管理系统上安装 TLS 客户端软件
- 获取服务器和客户端的 X.509 证书
- 在 Junos PKI 中安装服务器的本地证书
- 在 Junos PKI 中安装 CA 证书
- 通过 TLS 启用 NETCONF 服务
- 配置 TLS 客户端到 NETCONF 的用户名映射
- 配置默认 NETCONF 用户名映射
- 为 NETCONF 用户配置用户帐户
- 启动 NETCONF-over-TLS 会话
在网络管理系统上安装 TLS 客户端软件
要使用 TLS 建立 NETCONF 会话,网络管理系统必须先与 Junos 设备建立 TLS 连接。因此,网络管理系统需要软件来管理 TLS 协议。例如,您可以安装和使用 OpenSSL 工具包,这是适用于传输层安全 (TLS) 和安全套接字层 (SSL) 协议的工具包。它采用 Apache 样式的许可证进行许可。
有关 OpenSSL 的更多信息,请参阅 https://www.openssl.org。
获取服务器和客户端的 X.509 证书
TLS 协议使用 X.509 公钥证书来验证服务器和客户端的身份。要通过 TLS 建立 NETCONF 会话,服务器和客户端都必须具有 X.509 证书,并且证书必须由有效的证书颁发机构 (CA) 签名。通过 TLS 的 NETCONF 会话不接受自签名证书。
要使用 OpenSSL 获取 NETCONF 客户端的证书:
同样,生成服务器证书。
-
生成一个私有密钥,并指定密钥长度(以位)。
user@nms:~$ openssl genrsa -out server.key 2048 Generating RSA private key, 2048 bit long modulus (2 primes) ......................................................+++++ .............+++++ e is 65537 (0x010001)
-
生成证书签名请求 (CSR)。
user@nms:~$ openssl req -new -key server.key -out server.csr -sha256 -subj "/C=US/ST=CA/L=Sunnyvale/O=Juniper/CN=host.example.com"
-
通过请执行以下操作之一生成证书:
-
将 CSR 提交到证书颁发机构,以请求 X.509 证书。
-
使用 CA 对 CSR 进行签名,以生成服务器证书。
user@nms:~$ openssl x509 -req -in server.csr -CA serverIntCA.crt -CAkey serverIntCA.key -CAcreateserial -out server.crt -days 365 Signature ok subject=C = US, ST = CA, L = Sunnyvale, O = Juniper, CN = host.example.com Getting CA Private Key
-
Junos OS 公钥基础架构 (PKI) 提供用于数字证书管理的基础架构。您还可以使用 Junos OS PKI 为服务器的本地证书生成所需的密钥对和 CSR。有关 Junos OS PKI 和获取证书的不同方法的信息,请参阅 具有 PKI 的数字证书概述 和相关文档。
在 Junos PKI 中安装服务器的本地证书
服务器的本地证书是用作 NETCONF 和 TLS 服务器的 Junos 设备的 X.509 证书。您必须在 Junos PKI 中为设备安装本地证书。
在 Junos PKI 中安装服务器的本地证书:
在 Junos PKI 中安装 CA 证书
数字证书是通过受信任的第三方 (即证书颁发机构)验证您身份的一种电子手段。通过 TLS 建立 NETCONF 会话时,客户端和服务器必须各自拥有 X.509 数字证书才能验证其身份。您必须配置验证 Junos 公钥基础架构 (PKI) 中的客户端证书所需的根 CA 证书。您还必须配置在 Junos PKI 中验证服务器本地证书所需的任何 SA。因此,您可以为每个 CA 配置一个证书颁发机构配置文件,并加载相应的 CA 证书和证书撤销列表 (CRL)。此配置使 Junos 设备能够根据 CA 验证证书。
如果服务器证书链不包含中间 CA,则必须配置根 CA 证书。否则,您只需配置中间 SA。
要手动配置 CA 配置文件并加载相应的 CA 证书和 CRL:
通过 TLS 启用 NETCONF 服务
要通过 TLS 启用 NETCONF:
配置 TLS 客户端到 NETCONF 的用户名映射
您可以定义特定客户端的客户端证书与 NETCONF 用户名之间的映射。如果未为特定客户端定义映射,则必须定义默认映射,以便客户端通过 TLS 建立 NETCONF 会话。
要定义为给定客户端派生 NETCONF 用户名的映射:
配置默认 NETCONF 用户名映射
您可以定义一个默认映射,当客户端与在层次结构级别上配置的 [edit system services netconf tls client-identity]
客户端不匹配时,该映射用于派生 NETCONF 用户名。
要定义默认映射以派生 NETCONF 用户名:
为 NETCONF 用户配置用户帐户
通过 TLS 建立 NETCONF 会话时,服务器会将客户端证书映射到在设备上执行该会话操作的 NETCONF 用户。Junos OS 支持用于 NETCONF-over-TLS 会话的本地用户和 LDAP 远程用户。NETCONF 用户必须在设备上本地定义用户帐户,或者由 LDAP 服务器进行身份验证,然后 LDAP 服务器将其映射到设备上本地定义的本地用户模板帐户。以下说明说明如何在 Junos 设备上创建用户帐户。
要为 Junos 设备上的 NETCONF 用户创建用户帐户,
另请参阅
启动 NETCONF-over-TLS 会话
网络管理系统充当 NETCONF 和 TLS 客户端。您可以使用任何软件管理 TLS 协议,从 Junos 设备启动 NETCONF-over-TLS 会话。
要启动 NETCONF-over-TLS 会话: