基于 StrongSwan 的 IPsec VPN 在 Ubuntu 16.04 上使用证书和预共享密钥基于 StrongSwan 的 IPsec VPN 在 Ubuntu 16.04 上使用证书和预共享密钥基于 StrongSwan 的 IPsec VPN 在 Ubuntu 16.04 上使用证书和预共享密钥基于 StrongSwan 的 IPsec VPN 在 Ubuntu 16.04 上使用证书和预共享密钥
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

基于 StrongSwan 的 IPsec VPN 在 Ubuntu 16.04 上使用证书和预共享密钥

在此页

  1. Strongswan 安装(二进制和源代码)
  2. 使用源代码进行 Strongswan 编译
  3. 点对点 VPN
  4. 基于预共享密钥的隧道
  5. 基于 X.509 证书的隧道

介绍

在本文中,我们的重点是 IPsec 协议的开源实现。网络层的安全是通过使用IPsec协议来保证的,IPsec协议由以下两个部分组成。

  • 身份验证标头 (AH)
  • 封装安全负载 (ESP)

使用 AH 确保数据包完整性和身份验证,ESP 组件提供机密性和安全性功能。 IPsec 的开源实现 StrongSwan(强安全 WAN)是一种众所周知的工具,它支持两种版本的互联网密钥交换 (IKE v1/2)/。密钥共享或互联网密钥交换是 IPSec VPN(虚拟专用网络)的一部分。 IKE 机制用于在 ESP 协议中的数据加密的两方之间共享密钥。在 IKE 步骤中使用 OpenSSL 和加密库的加密和完整性算法(例如 AES、SHA 等)。然而,安全算法的 Linux 内核实现用于 IPSec 的主要部分(ESP & AH)。强天鹅。

Strongswan 特点

  • 支持基于预共享密钥的身份验证。
  • 支持 X.509 格式的证书进行身份验证。
  • 支持 IKE v1/v2 的单一守护进程。
  • 可以轻松集成第三方插件和库。
  • 使用 openSC 项目支持硬件令牌。

strongswan 支持 Gateway-to-Gateway 和 Road warrior VPN。网络流量在站点到站点 vpn 中的组织网关设备上加密或解密。但是,从网关设备到最终用户/客户端机器建立了第二个安全通道。

在本文中,strongSwan 工具将安装在 Ubuntu 16.04 (LTS) 上,我将展示 OpenSC 的硬件令牌集成,最后使用预共享密钥和 x.509 证书创建网关到网关隧道.硬件令牌或硬件安全模块 (HSM)(例如 USB 和智能卡)可以与 strongswan 一起使用来存储加密密钥(公钥和私钥)和证书。 strongswan 中的硬件令牌支持是使用开源项目 OpenSC(工具和库集)提供的。 OpenSC 工具也提供基于 PKCS#15 的文件结构和使用 PKCS#11 API 访问智能卡。 openSC 支持以下智能卡。

  • 西科斯
  • 设置COS
  • CardO
  • 星际
  • ASEPCOS

Strongswan 安装(二进制和源代码)

几乎所有广泛使用的 Linux 发行版都提供了 strongswan 的二进制包 (deb/rpm)。本文将全面介绍使用二进制和源代码(具有所需功能)安装 strongswan。

在 Ubuntu 16.04 LTS 上可以使用以下命令安装 strongswan 的二进制包。

aptitude install strongswan

Ubuntu 存储库中可用的 strongswan 插件如下所示。

在 Ubuntu 平台上安装后,配置文件和文件夹(ipsec.conf、ipsec.secrets、ipsec.d、strongswan.conf、strongswan.d)存储在 /etc 目录中。

Strongswan编译使用源码

  • Opensc(用于支持 strongswan 中的 HSM)。
  • PC/SC(在 Ubuntu 平台上支持智能卡读卡器是必需的)。
  • GMP 库(strongswan 中的数学运算需要)。
  • OpenSSL 工具(众所周知的加密算法实现,例如 AES、SHA1)。
  • PKCS(公钥加密标准)1,7,8,11,12。

在本文中,PCSC-Lite 工具将在 Ubuntu 平台上随 opensc 安装,以添加对智能卡读卡器的支持。 CCID 读者推荐使用 PCSC-Lite。

在我们开始编译 strongswan 之前,运行以下命令来安装必备软件。

1.Opensc 安装

aptitude install opensc

2. GMP库安装

aptitude install libgmp10

安装GMP的开发库。

aptitude install libgmp-dev

使用以下命令安装 OpenSSL libcrypto。

apt-get install libssl-dev

编译步骤

转到 /usr/src/ 文件夹并使用 wget 命令下载最新版本的 strongswan。

cd /usr/src
wget https://download.strongswan.org/strongswan-5.5.0.tar.gz

提取压缩文件并进入提取的文件夹以运行配置脚本。

tar –xzf strongswan-5.5.0.tar.gz
cd strongswan-5.5.0

运行 configure 脚本来检查 strongswan 的依赖关系。 HSM 支持已在 strongswan 的最新版本中启用,如下所示。

运行配置脚本,使用前缀 /usr/local 并启用 openssl 支持。

./configure --prefix=/usr/local  --enable-openssl

以下快照显示配置脚本没有生成错误,因为系统上已经安装了所有必需的依赖项。

运行以下两条命令在 /usr/local 目录下编译安装 strongswan。

make
make install

Ubuntu平台strongswan编译安装完成,将几个配置文件(strongswan.conf、ipsec.conf和ipsec.secrets)和文件夹(strongswan.d、ipsec.d)复制到/usr/local/etc路径下. VPN 策略的配置放在 ipsec.conf 文件中,机密信息存储在 ipsec.secrets 文件中。 Strongswan 插件配置存储在 strongswan.d 目录中。

strongswan 支持传输和隧道 VPN。在隧道模式下,提供通道的站点到站点的安全性,并与cisco、huawei、juniper等厂商的设备协同工作。

站点到站点 VPN

下图显示了基于 strongswan 的 VPN 网关设备在网络中的放置。将在组织的 192.168.223.0/24 和 192.168.222.0/24 专用网络之间建立安全通信通道。

在 A 和 B 专用网络之间使用 IPsec 之前,请确保组织的 VPN 网关之间的路由正常工作,以便 A 侧的 VPN 网关可以 ping 远程侧 VPN 机器 (B),从而确保网络连接正常。

如下所示,strongswan 工具的默认配置在 /usr/local/etc/ 目录中。

基于预共享密钥的隧道

在第一种情况下,将在网关设备之间创建基于共享秘密的 VPN。著名的密钥共享算法 Diffie-Hellman 被 strongswan 用于相互认证。有关 IPsec 协议如何工作的详细信息,请访问以下链接。

VPN的配置:

(在旁边)

strongswan VPN 策略的主要配置在 ipsec.conf 文件中。在此配置文件中可以找到如下信息。

  • IKE 版本
  • 隧道类型
  • 源和目标网关
  • VPN 专用网络

A端的ipsec.conf如下。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

IPsec 机密(共享密钥、私钥密码、用于解锁 hsm 的 pin)存储在 ipsec.secrets 文件中。如下所示,VPN 双方之间的分片秘密是“test12345”。

192.168.1.101 192.168.1.102 : PSK 'test12345'

(B面)

远程端的 ipsec.conf 和 ipsec.secrets 文件中的配置将与本地站点的配置相反,如下所示。

ipsec.conf 文件的内容如下。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

ipsec.secrets 文件包含远程端的共享密钥。

192.168.1.102 192.168.1.101 : PSK 'test12345'

在双方设置配置文件后,使用以下命令启动 strongswan 守护程序 (charon)。

以下命令显示设备上创建的 VPN 的状态。

ipsec statusall

隧道两侧(本地和远程)的状态如下所示。

此 Linux 命令显示 IPsec 隧道的策略和状态。

ip xfrm state
ip xfrm policy

如上面的命令输出所示,敏感信息esp/hmac(keys)也被ip xfrm命令显示。

基于 X.509 证书的隧道

在基于X.509证书(公钥认证)的隧道中,需要为证书颁发机构(CA)、客户端A和B生成证书。

以下屏幕截图显示了使用 strongswan 的 PKI 实用程序生成自签名 CA 证书。

进入 /usr/local/etc/ipsec.d 路径并运行以下命令。

cd /usr/local/etc/ipsec.d
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem    

客户端 A 的证书生成如下所示。

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
chmod 600 private/client1Key.pem
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

类似地,为客户端 B 生成公钥/私钥对和证书。

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
chmod 600 private/client2Key.pem
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem

成功生成 CA 和客户端证书后,下一步是更改 ipsec.conf 和 ipsec.secrets 配置。请查阅 strongswan 文档以获取有关 ipsec.conf 和机密文件更改的更多详细信息。

A 端的 ipsec.conf 和 ipsec.secrets 的内容如下。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client1Cert.pem
        leftid="C=CH, O=strongSwan, CN=device1"
        rightid="C=CH, O=strongSwan, CN=device2"
#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem

下面也给出了B端的配置。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client2Cert.pem
        leftid="C=CH, O=strongSwan, CN=device2"
        rightid="C=CH, O=strongSwan, CN=device1"

#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem

运行 ipsec restart 命令以应用以上更改并检查使用证书创建的隧道的状态。

ipsec statusall    # at side A
ipsec statusall    # at side B

最后,使用strongswan工具成功创建了基于证书的VPN。

©2015-2025 艾丽卡 support@alaica.com