6.6. 使用基于证书的身份验证手动配置 IPsec 网格 VPN


IPsec 网格会创建一个完全互连的网络,每个服务器都可以与所有其他服务器安全通信。这是涵盖多个数据中心或云供应商的分布式数据库集群或高可用性环境的理想选择。在每对服务器之间建立直接的加密隧道可确保安全通信,而无需中央瓶颈。

为进行身份验证,使用由证书颁发机构(CA)管理的数字证书,可提供高度安全、可扩展的解决方案。网格中的每个主机都提供由可信 CA 签名的证书。这个方法提供强大的、可靠的身份验证,并简化了用户管理。可以在 CA 中集中授予或撤销访问权限,Libreswan 通过针对证书撤销列表(CRL)检查每个证书来强制实施这个访问权限,如果证书出现在列表中,则拒绝访问。

先决条件

  • 网格中的每个对等点都存在一个公共密钥加密标准(PKCS UDS)文件,其中包含以下内容:

    • 服务器的私钥
    • 服务器证书
    • CA 证书
    • 如果需要,则中间证书

    有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。

  • 服务器证书包含以下字段:

    • 扩展的密钥使用(EKU)设置为 TLS Web 服务器身份验证
    • 通用名称(CN)或主题备用名称(SAN)被设置为主机的完全限定域名(FQDN)。
    • X509v3 CRL 发行版点包含证书撤销列表(CRL)的 URL。

流程

  1. 如果 Libreswan 尚未安装,请执行以下步骤:

    1. 安装 libreswan 软件包:

      # dnf install libreswan
      Copy to Clipboard Toggle word wrap
    2. 初始化网络安全服务(NSS)数据库:

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      该命令在 /var/lib/ipsec/nss/ 目录中创建数据库。

    3. 启用并启动 ipsec 服务:

      # systemctl enable --now ipsec
      Copy to Clipboard Toggle word wrap
    4. 在防火墙中打开 IPsec 端口和协议:

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. 将 PKCSautomationhub 文件导入到 NSS 数据库中:

    # ipsec import <file>.p12
    Enter password for PKCS12 file: <password>
    pk12util: PKCS12 IMPORT SUCCESSFUL
    correcting trust bits for Example-CA
    Copy to Clipboard Toggle word wrap
  3. 显示服务器和 CA 证书的 nicknames:

    # certutil -L -d /var/lib/ipsec/nss/
    Certificate Nickname     Trust Attributes
                             SSL,S/MIME,JAR/XPI
    
    server1                  u,u,u
    Example-CA               CT,,
    ...
    Copy to Clipboard Toggle word wrap

    您需要配置文件此信息。

  4. /etc/ipsec.d/ 目录中为连接创建一个 .conf 文件。例如,使用以下设置创建 /etc/ipsec.d/mesh.conf 文件:

    1. 添加 config setup 部分以启用 CRL 检查:

      config setup
          crl-strict=yes
          crlcheckinterval=1h
      Copy to Clipboard Toggle word wrap

      示例中指定的设置包括:

      crl-strict=yes
      启用 CRL 检查。如果 NSS 数据库中没有 CRL,则身份验证对等点将被拒绝。
      crlcheckinterval=1h
      在指定周期后,从服务器证书中指定的 URL 重新获取 CRL。
    2. 添加在网格中成员间强制实施流量的部分:

      conn <connection_name>
          # General setup and authentication type
          auto=ondemand
          authby=rsasig
      
          # Local settings settings
          left=%defaultroute
          leftid=%fromcert
          leftcert="<server_certificate_nickname>"
          leftrsasigkey=%cert
          leftsendcert=always
          failureshunt=drop
          type=transport
      
          # Settings related to other peers in the mesh
          right=%opportunisticgroup
          rightid=%fromcert
      Copy to Clipboard Toggle word wrap

      示例中指定的设置包括:

      left=%defaultroute
      ipsec 服务启动时,动态设置默认路由接口的 IP 地址。或者,您可以将 left 参数设置为 IP 地址或主机的 FQDN。
      leftid=%fromcertrightid=%fromcert
      将 Libreswan 配置为从证书的可分辨名称(DN)字段检索身份。
      leftcert="<server_certificate_nickname>"
      设置 NSS 数据库中使用的服务器证书的别名。
      leftrsasigkey=%cert
      将 Libreswan 配置为使用嵌入在证书中的 RSA 公钥。
      leftsendcert=always
      指示对等点始终发送证书,以便对等点可以针对 CA 证书进行验证。
      failureshunt=drop
      如果 IPsec 协商失败,强制实施加密并丢弃流量。对于安全网格来说,这至关重要。
      right=%opportunisticgroup
      指定连接应应用到策略文件中定义的动态远程对等点组。这可让 Libreswan 对该组中每个列出的 IP 或子网实例化 IPsec 隧道。

    有关示例中使用的所有参数的详情,请查看系统中的 ipsec.conf (5) 手册页。

  5. 创建 /etc/ipsec.d/policies/server-mesh 策略文件,该文件以无类别域间路由(CIDR)格式指定对等或子网:

    192.0.2.0/24
    198.51.100.0/24
    Copy to Clipboard Toggle word wrap

    使用这些设置,ipsec 服务会加密这些子网中主机之间的流量。如果主机没有配置为 IPsec 网格的成员,则此主机和网格成员之间的通信会失败。

  6. 重启 ipsec 服务:

    # systemctl restart ipsec
    Copy to Clipboard Toggle word wrap
  7. 对您在策略文件中指定的子网中的每个主机上重复这个过程。

验证

  1. 将流量发送到网格中的主机以建立隧道。例如,ping 主机:

    # ping -c3 <peer_in_mesh>
    Copy to Clipboard Toggle word wrap
  2. 显示 IPsec 状态:

    # ipsec status
    Copy to Clipboard Toggle word wrap

    如果成功建立连接,输出包含 peer 的以下行:

    • 互联网密钥交换版本 2 (IKEv2)协商的阶段 1 成功完成:

      #1: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 12822s; REPLACE in 13875s; newest; idle;
      Copy to Clipboard Toggle word wrap

      安全关联(SA)现在可以协商实际数据加密隧道,称为子 SA 或阶段 2 SA。

    • 已建立了子 SA:

      #2: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 13071s; REPLACE in 13875s; newest; eroute owner; IKE SA #1; idle;
      Copy to Clipboard Toggle word wrap

      这是您的数据流量通过的实际隧道。

  3. 检查服务是否载入 CRL 并将条目添加到 NSS 数据库中:

    # ipsec listcrls
    
    List of CRLs:
    
    issuer: CN=Example-CA
    revoked certs: 1
    updates: this Tue Jul 15 10:22:36 2025
             next Sun Jan 11 10:22:36 2026
    
    List of CRL fetch requests:
    
    Jul 15 15:13:56 2025, trials: 1
           issuer:  'CN=Example-CA'
           distPts: 'https://ca.example.com/crl.pem'
    Copy to Clipboard Toggle word wrap

后续步骤

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat