我在使用 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 末尾是否真的有一个 .(点)?如果有,请将其删除。