使用 iphone(默认 Cisco VPN 客户端)和 Strongswan 4.5.0 服务器设置 VPN 连接(IKEv1)时遇到问题

使用 iphone(默认 Cisco VPN 客户端)和 Strongswan 4.5.0 服务器设置 VPN 连接(IKEv1)时遇到问题

我在使用 iPhone(默认 Cisco VPN 客户端)和 Strongswan 4.5.0 服务器设置 VPN 连接(IKEv1)时遇到问题。

Strongswan 服务器在 Ubuntu Linux 上运行,它连接到某个 wifi 热点。这是使用的指南。我生成了 CA、服务器和客户端证书,唯一的区别如下所述。

“生成服务器证书时,按照链接 CN=vpn.strongswan.org,我将 CN 名称更改为 CN=192.168.43.212。”

生成证书后,以下内容(clientCert.p12 和 caCert.pem)将通过邮件发送到手机并安装在 iPhone 上。安装后,我注意到证书也被视为受信任。

以下是分配给各个接口的 IP 地址

服务器正在运行的Linux服务器wlan0接口ip:192.168.43.212 Iphone eth0接口ip地址:192.168.43.72。iphone也连接了同样的wifi热点。

以下是客户端配置的快照。

  • 描述 坚强的天鹅
  • 服务器 192.168.43.212
  • 账户 ipsecvpn
  • 密码 ***********
  • 使用证书
  • 证书客户端

上述用户名和密码与 ipsec.secrets 文件同步。我使用以下 ipsec.conf 配置:

 # basic configuration
 config setup
        plutodebug=all
        # crlcheckinterval=600
        # strictcrlpolicy=yes
        # cachecrls=yes
        nat_traversal=yes
        # charonstart=yes
        plutostart=yes

# Add connections here.
# Sample VPN connections
conn ios1
        keyexchange=ikev1
        authby=xauthrsasig
        xauth=server
        left=%defaultroute
        leftsubnet=0.0.0.0/0
        leftfirewall=yes
        leftcert=serverCert.pem
        right=192.168.43.72
        rightsubnet=10.0.0.0/24
        rightsourceip=10.0.0.2
        rightcert=clientCert.pem
        pfs=no
        auto=add

使用上述配置,当我在 iPhone 上启用 VPN 时,系统显示

无法验证服务器证书。

我在 Linux 服务器上运行了 Wireshark,发现客户端和服务器之间最初会进行一些 ISAKMP 消息交换,这些消息交换很成功,但在授权之前,客户端会发送一些信息消息,不久之后,客户端会弹出错误信息

无法验证服务器证书。

捕获 Strongswan 服务器上的日志,并在下面的服务器日志中观察到错误:

来自 auth.log

Apr 25 20:16:08 Linux pluto[4025]: |    ISAKMP version: ISAKMP Version 1.0
Apr 25 20:16:08 Linux pluto[4025]: |    exchange type: ISAKMP_XCHG_INFO
Apr 25 20:16:08 Linux pluto[4025]: |    flags: ISAKMP_FLAG_ENCRYPTION
Apr 25 20:16:08 Linux pluto[4025]: |    message ID:  9d 1a ea 4d
Apr 25 20:16:08 Linux pluto[4025]: |    length: 76
Apr 25 20:16:08 Linux pluto[4025]: | ICOOKIE:  f6 b7 06 b2  b1 84 5b 93
Apr 25 20:16:08 Linux pluto[4025]: | RCOOKIE:  86 92 a0 c2  a6 2f ac be
Apr 25 20:16:08 Linux pluto[4025]: | peer:  c0 a8 2b 48
Apr 25 20:16:08 Linux pluto[4025]: | state hash entry 8
Apr 25 20:16:08 Linux pluto[4025]: | state object not found
Apr 25 20:16:08 Linux pluto[4025]: **packet from 192.168.43.72:500: Informational Exchange is for an unknown (expired?) SA**
Apr 25 20:16:08 Linux pluto[4025]: | next event EVENT_RETRANSMIT in 8 seconds for #8
Apr 25 20:16:16 Linux pluto[4025]: | 
Apr 25 20:16:16 Linux pluto[4025]: | *time to handle event
Apr 25 20:16:16 Linux pluto[4025]: | event after this is EVENT_RETRANSMIT in 2 seconds
Apr 25 20:16:16 Linux pluto[4025]: | handling event EVENT_RETRANSMIT for 192.168.43.72 "ios1" #8
Apr 25 20:16:16 Linux pluto[4025]: | sending 76 bytes for EVENT_RETRANSMIT through wlan0 to 192.168.43.72:500:
Apr 25 20:16:16 Linux pluto[4025]: |   a6 a5 86 41  4b fb ff 99  c9 18 34 61  01 7b f1 d9
Apr 25 20:16:16 Linux pluto[4025]: |   08 10 06 01  e9 1c ea 60  00 00 00 4c  ba 7d c8 08
Apr 25 20:16:16 Linux pluto[4025]: |   13 47 95 18  19 31 45 30  2e 22 f9 4d  85 2c 27 bc
Apr 25 20:16:16 Linux pluto[4025]: |   9e 9b e1 ae  1e 35 51 6f  ab 80 f5 73  3c 15 8d 20
Apr 25 20:16:16 Linux pluto[4025]: |   4b 46 47 86  50 24 3f 13  15 7d d5 17
Apr 25 20:16:16 Linux pluto[4025]: | inserting event EVENT_RETRANSMIT, timeout in 40 seconds for #8
Apr 25 20:16:16 Linux pluto[4025]: | next event EVENT_RETRANSMIT in 2 seconds for #10
Apr 25 20:16:16 Linux pluto[4025]: | rejected packet:
Apr 25 20:16:16 Linux pluto[4025]: | 
Apr 25 20:16:16 Linux pluto[4025]: | control:
Apr 25 20:16:16 Linux pluto[4025]: |   30 00 00 00  00 00 00 00  00 00 00 00  0b 00 00 00
Apr 25 20:16:16 Linux pluto[4025]: |   6f 00 00 00  02 03 03 00  00 00 00 00  00 00 00 00
Apr 25 20:16:16 Linux pluto[4025]: |   02 00 00 00  c0 a8 2b 48  00 00 00 00  00 00 00 00
Apr 25 20:16:16 Linux pluto[4025]: | name:
Apr 25 20:16:16 Linux pluto[4025]: |   02 00 01 f4  c0 a8 2b 48  00 00 00 00  00 00 00 00
Apr 25 20:16:16 Linux pluto[4025]: **ERROR: asynchronous network error report on wlan0 for message to 192.168.43.72 port 500, complainant 192.168.43.72: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]**

请有人提供有关此错误的一些更新以及如何解决此问题。

答案1

根据Apple 的文档网关的 IP 地址或 DNS 名称必须作为 subjectAltName 包含在证书中。使用 OpenSSL 生成证书时使用以下内容。

subjectAltName = IP:192.168.43.212

上述操作是否真的需要可能取决于您设备上的 iOS 版本。在 iOS 5.1 中,网关的身份似乎尚未得到验证。

上述说法仅适用于混合身份验证。如果客户端使用证书进行身份验证,则网关身份实际上已得到验证。

编辑

一些实验表明,将 IP 地址作为通用名称 (CN) 添加到证书的专有名称 (DN) 中就足够了,但前提是证书中没有任何 subjectAltNames。如果有,您还必须将 IP 地址添加为 subjectAltName。

另外,参考您在此处的声明:

“生成服务器证书时,按照链接 CN=vpn.strongswan.org,我将 CN 名称更改为 CN=192.168.43.212。”

您的 CN 末尾是否真的有一个 .(点)?如果有,请将其删除。

相关内容