Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

基于传输层安全的 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 用户名。每个客户端只能配置一个指纹,并且每个客户端的指纹必须唯一。例如:

配置的证书指纹使用 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:/CNCN) 作为 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 会话:

  1. 客户端发送 TLS ClientHello 消息以发起 TLS 握手。

  2. 服务器会发送一条 ServerHello 消息、服务器证书链以及一条证书请求消息,从客户端请求证书。

  3. 客户端验证服务器的身份并发送客户端证书链。

  4. 服务器使用已在服务器上预配置的客户端根 CA 验证客户端证书链。

  5. 服务器为该客户端派生 NETCONF 用户名。

  6. 如果 NETCONF 用户名有效,服务器将启动 NETCONF 会话,服务器和客户端交换 NETCONF <hello> 消息。

  7. 客户端使用 NETCONF 用户的访问权限和权限执行 NETCONF 操作。

  8. 客户端执行 <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 客户端软件

要使用 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 客户端的证书:

  1. 生成一个私有密钥,并指定密钥长度(以位)。
    注意:

    Junos 设备不支持在通过 TLS 的 NETCONF 会话中使用椭圆曲线数字签名算法 (ECDSA) 密钥。

  2. 如果要在客户端证书中定义 NETCONF 用户名,请更新您的 openssl.cnf 或等效配置文件以定义subjectAltName=dirName扩展并指定 NETCONF 用户名。
  3. 生成证书签名请求 (CSR),其中包含实体的公钥和有关其身份的信息。
  4. 通过请执行以下操作之一生成证书:
    • 将 CSR 提交给证书颁发机构,以请求 X.509 证书,并提供要包含任何其他扩展的配置文件。

    • 使用 CA 对 CSR 进行签名以生成客户端证书,如果需要引用您的配置文件和-extensions扩展,请添加-extfile和选项。

  5. 验证公用名 (CN) 字段和扩展(如果提供)是否正确。

同样,生成服务器证书。

  1. 生成一个私有密钥,并指定密钥长度(以位)。

  2. 生成证书签名请求 (CSR)。

  3. 通过请执行以下操作之一生成证书:

    • 将 CSR 提交到证书颁发机构,以请求 X.509 证书。

    • 使用 CA 对 CSR 进行签名,以生成服务器证书。

Junos OS 公钥基础架构 (PKI) 提供用于数字证书管理的基础架构。您还可以使用 Junos OS PKI 为服务器的本地证书生成所需的密钥对和 CSR。有关 Junos OS PKI 和获取证书的不同方法的信息,请参阅 具有 PKI 的数字证书概述 和相关文档。

在 Junos PKI 中安装服务器的本地证书

服务器的本地证书是用作 NETCONF 和 TLS 服务器的 Junos 设备的 X.509 证书。您必须在 Junos PKI 中为设备安装本地证书。

在 Junos PKI 中安装服务器的本地证书:

  1. 将证书和私有密钥复制到 Junos 设备。
  2. 使用 Junos PKI 从指定文件加载证书。

    定义唯一证书标识符,并指定证书的文件路径以及私钥或密钥对。例如:

  3. (可选)验证证书。

在 Junos PKI 中安装 CA 证书

数字证书是通过受信任的第三方 (即证书颁发机构)验证您身份的一种电子手段。通过 TLS 建立 NETCONF 会话时,客户端和服务器必须各自拥有 X.509 数字证书才能验证其身份。您必须配置验证 Junos 公钥基础架构 (PKI) 中的客户端证书所需的根 CA 证书。您还必须配置在 Junos PKI 中验证服务器本地证书所需的任何 SA。因此,您可以为每个 CA 配置一个证书颁发机构配置文件,并加载相应的 CA 证书和证书撤销列表 (CRL)。此配置使 Junos 设备能够根据 CA 验证证书。

注意:

如果服务器证书链不包含中间 CA,则必须配置根 CA 证书。否则,您只需配置中间 SA。

要手动配置 CA 配置文件并加载相应的 CA 证书和 CRL:

  1. 将 CA 证书和任何必需的 CA 证书撤销列表 (CCL) 下载到 Junos 设备。
  2. 为每个必需的 CA 配置可信 CA 配置文件,例如:
  3. 在 Junos PKI 中加载与客户端的根 CA 配置文件关联的 CA 证书,并指定证书文件的位置。
  4. 在 Junos PKI 中加载与服务器 CA 配置文件关联的 CA 证书,并指定证书文件的位置。
    • 如果证书链只有根 CA,请加载根 CA 证书。

    • 如果证书链包含中间 CA,则只需加载中间 CA 证书。

  5. 如果需要,加载给定 CA 配置文件的 CRL,例如:
    注意:

    如果未为给定的 CA 配置文件配置证书撤销列表,则必须在revocation-check disable[edit security pki ca-profile profile-name] hierarchy level.

  6. (可选)验证 CA 证书。

通过 TLS 启用 NETCONF 服务

要通过 TLS 启用 NETCONF:

  1. 配置服务器的本地证书 ID,并引用安装证书时定义的 ID。
  2. 定义服务器应如何派生给定客户端的 NETCONF 用户名。
  3. (可选)为基于 TLS 的 NETCONF 会话配置跟踪选项,例如:
  4. 提交配置。

配置 TLS 客户端到 NETCONF 的用户名映射

您可以定义特定客户端的客户端证书与 NETCONF 用户名之间的映射。如果未为特定客户端定义映射,则必须定义默认映射,以便客户端通过 TLS 建立 NETCONF 会话。

要定义为给定客户端派生 NETCONF 用户名的映射:

  1. 通过在网络管理系统和证书格式上执行适合您的环境的命令,确定客户端证书的指纹,例如:
  2. 确定 RFC 5246 传输层安全 (TLS) 协议 1.2 版中定义的指纹散列算法标识符。

    此示例使用与标识符值 4 对应的 SHA-256 散列算法。

    • md5:1

    • sha1: 2

    • sha224: 3

    • sha256: 4

    • sha384: 5

    • sha512: 6

  3. 在 Junos 设备上,为客户端定义唯一标识符。
  4. 配置 x509c2n:tls 指纹格式的客户端证书指纹。

    指纹的第一个八位位组是散列算法标识符,其余八位位位组是散列算法的结果。

  5. 配置映射类型,用于定义服务器如何为该客户端派生 NETCONF 用户名。
  6. 如果映射类型为specified,请配置要用于该客户端的 NETCONF 用户名。
  7. 提交配置。

配置默认 NETCONF 用户名映射

您可以定义一个默认映射,当客户端与在层次结构级别上配置的 [edit system services netconf tls client-identity] 客户端不匹配时,该映射用于派生 NETCONF 用户名。

要定义默认映射以派生 NETCONF 用户名:

  1. 配置服务器用于派生 NETCONF 用户名的默认映射类型。
  2. 如果映射类型为specified,请配置默认 NETCONF 用户名。
  3. 提交配置。

为 NETCONF 用户配置用户帐户

通过 TLS 建立 NETCONF 会话时,服务器会将客户端证书映射到在设备上执行该会话操作的 NETCONF 用户。Junos OS 支持用于 NETCONF-over-TLS 会话的本地用户和 LDAP 远程用户。NETCONF 用户必须在设备上本地定义用户帐户,或者由 LDAP 服务器进行身份验证,然后 LDAP 服务器将其映射到设备上本地定义的本地用户模板帐户。以下说明说明如何在 Junos 设备上创建用户帐户。

要为 Junos 设备上的 NETCONF 用户创建用户帐户,

  1. user使用唯一用户名配置语句,并包括该class语句以指定具有用户执行的所有操作所需的权限的登录类。

    例如,以下配置定义两个用户: netconf-usernetconf-default-user

  2. (可选)配置 uid and full-name 语句以指定用户的 ID 和名称。
  3. 提交配置以激活设备上的用户帐户。
  4. 在客户端通过 TLS 建立 NETCONF 会话的每个 Junos 设备上重复上述步骤。

启动 NETCONF-over-TLS 会话

网络管理系统充当 NETCONF 和 TLS 客户端。您可以使用任何软件管理 TLS 协议,从 Junos 设备启动 NETCONF-over-TLS 会话。

要启动 NETCONF-over-TLS 会话:

  1. 在端口 6513 上启动与 NETCONF 服务器的连接,并提供客户端的证书和密钥、服务器的根 CA 证书以及验证客户端证书所需的所有中间 CA 证书。
  2. 验证会话是否映射到正确的 NETCONF 用户。

    在会话建立期间,服务器会发出该会话的 NETCONF 用户名。

  3. 根据需要执行 NETCONF 操作。
  4. 关闭 NETCONF 会话和 TLS 连接。