简介
本文档介绍在Windows 10/11上使用内置客户端设置FlexVPN的配置步骤。
先决条件
要求
思科建议您了解以下主题:
- Windows内置的VPN客户端
- CIsco IOS® XE FlexVPN配置
- OpenSSL基本配置
使用的组件
本配置指南基于以下硬件和软件版本:
- Windows 10和Windows 11
- 思科IOS XE 16.12.4
- OpenSSL证书颁发机构(CA)v1.1.0g
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
配置
CA前提条件
CA必须允许您在证书中嵌入所需的扩展密钥使用(EKU)。例如,在IKEv2服务器上, Server Auth EKU
是必需的,而客户端证书需要 Client Auth EKU
. 本地部署可以利用:
- Cisco IOS CA服务器 — 由于Cisco Bug ID CSCuc82575,无法使用自签名的证书。
- OpenSSL CA服务器 —
openssl.cnf
必须具有extendedKeyUsage = serverAuth, clientAuth,此文件通常位于路径中 /etc/ssl/
.
- Microsoft CA服务器 — 通常,这是首选选项,因为可以将其配置为完全根据需要签署证书。
网络图
拓扑实验
配置
配置CA
路由器作为CA
如果您使用Cisco IOS CA服务器,请确保使用最新的Cisco IOS软件版本,该版本会分配EKU。
IOS-CA# show run | section crypto pki
crypto pki server IOS-CA
issuer-name cn=IOS-CA.cisco.com,ou=TAC,o=cisco
grant auto
eku server-auth client-auth
OpenSSL作为CA
OpenSSL CA基于openssl.cnf文件。OpenSSL服务器的“config”文件必须具有:
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
配置路由器IOS XE/IOS
如果OpenSSL,请导入pkcs12证书
对于Cisco IOS,证书的EKU字段必须设置为“服务器身份验证”(Server Authentication),对于客户端必须为“客户端身份验证”(Client Authentication)。通常,同一个CA用于对客户端和服务器证书进行签名。在这种情况下,服务器证书和客户端证书上分别显示“服务器身份验证”和“客户端身份验证”,这是可以接受的。
如果CA在IKEv2服务器上以公钥加密标准(PKCS)#12格式向客户端和服务器颁发证书,并且如果证书撤销列表(CRL)不可达或不可用,则必须进行配置:
crypto pki trustpoint FlexRootCA
revocation-check none
输入以下命令以导入PKCS#12证书:
copy ftp://user:***@OpenSSLServer/p12/FlexRootCA.p12* flash:/
crypto pki import FlexRootCA pkcs12 flash:/FlexRootCA.p12 password
!! Note: FlexRootCA.p12 is a pkcs12 format certificate that has CA Certificate bundled in it.
您还可以在OpenSSL中将pkcs12转换为base64,并在终端中导入证书:
openssl base64 -in ikev2.p12 -out ikev2.pem
cat ikev2.pem —>复制base64输出
crypto pki trustpoint FlexRootCA
enrollment terminal
revocation-check none
crypto pki import FlexRootCA pkcs12 terminal password
***paste the base64 output from the cat ikev2.pem here***
quit --> when the paste ends you need to type quit to finish
请求路由器作为CA服务器的证书
如果Cisco IOS CA服务器自动授予证书,则必须使用CA服务器URL配置IKEv2服务器以接收证书,如下例所示:
crypto pki trustpoint FlexRootCA
enrollment url http://
:80
subject-name cn=ikev2.cisco.com,ou=TAC,o=cisco
revocation-check none
eku server-auth client-auth
配置信任点后,您需要:
- 使用以下命令对CA进行身份验证:
crypto pki authenticate FlexRootCA
- 使用以下命令使用CA注册IKEv2服务器:
crypto pki enroll FlexRootCA
使用证书身份验证配置FlexVPN IKEv2
以下是IKEv2配置的示例:
aaa authorization network winclient local
ip local pool mypool 172.16.0.101 172.16.0.250
!! Certificate MAP to match Remote Certificates, in our case the Windows Clients
crypto pki certificate map winclient_map 10
subject-name co ou = tac
!! One of the proposals that Windows 10/11 Built-In Client Likes
crypto ikev2 proposal winclient
encryption aes-cbc-256
integrity sha1
group 2
crypto ikev2 policy winclient
proposal winclient
!! IKEv2 Local Authorization Policy. Split-Tunneling does not work, as was
!! the case in good old l2tp over IPSec.
crypto ikev2 authorization policy winclient_author
pool mypool
crypto ikev2 profile winclient-rsa
match certificate winclient_map
identity local fqdn ikev2.cisco.com
authentication local rsa-sig
authentication remote rsa-sig
pki trustpoint FlexRootCA
aaa authorization group cert list winclient winclient_author
virtual-template 1
crypto ipsec transform-set aes256-sha1 esp-aes 256 esp-sha-hmac
crypto ipsec profile winclient_ikev2
set transform-set aes256-sha1
set ikev2-profile winclient-rsa
interface Virtual-Template1 type tunnel
ip unnumbered Loopback0
tunnel mode ipsec ipv4
tunnel protection ipsec profile winclient_ikev2
虚拟模板的IP未编号必须是除IPsec连接使用的本地地址以外的任何内容。(如果使用硬件客户端,您将通过IKEv2配置节点交换路由信息,并在硬件客户端上创建递归路由问题)。
注意:IOS XE版本17.06.01a思科漏洞ID CSCwa76260 和Cisco Bug ID CSCwa80474会干扰Windows内置客户端的正常功能,因为它们使用group2作为默认dh组。升级到固定版本后,系统会通知您将来会删除已弃用的密码,但这些密码仍然可以使用。其它信息:
配置IKEv2 Windows内置客户端
Windows 10内置客户端
1.导航至 Settings > Network & Internet > VPN
,然后单击或选择 Add a VPN Connection
如图所示:
Windows VPN设置
2.将VPN提供程序配置为Windows(内置)、连接名称、服务器名称或地址、VPN类型和登录信息类型(身份验证),然后单击 Save
如图所示.
Windows添加VPN设置
3.单击“更改适配器选项”,右键单击或选择名为 FlexVPN-IOS
.导航至 Properties > Security
并选择 Use machine certificates
如图所示:
Windows适配器选项
FlexVPN-IOS配置文件现已准备就绪,可在将证书导入计算机证书存储区后连接。
Windows 11内置客户端
1.导航至 Settings > Network & internet > VPN
并点击或选择Add VPN:
Windows 11 VPN设置
2.将VPN提供程序配置为Windows(内置)、连接名称、服务器名称或地址、VPN类型和登录信息类型(身份验证),然后保存:
Windows 11 VPN连接设置
3.单击 Network & Internet
再次单击“Advanced network settings(高级网络设置)” ,然后单击或选择 More network adapter options
如图所示:
适配器选项的Windows 11路径
右键单击或选择名为FlexVPN-IOS的适配器,然后导航至属性,导航至 Security
并选择Use machine certificates:
Windows 11适配器选项
FlexVPN-IOS配置文件现已准备就绪,可在将证书导入到计算机证书存储区后连接。
获取客户端证书
客户端证书需要以下因素:
- 客户端证书的EKU为“客户端身份验证”。此外,CA还会提供PKCS#12证书:客户端PKCS12证书必须进入本地计算机个人证书存储区
Windows PKCS12证书安装
1.打开pfx或p12证书:
点击或选择Store Location Local Machine:
证书导入向导第1步
2.指定p12或pfx的路径,如图所示。
证书导入向导第2步
3.键入私钥的密码,如图所示:
证书导入向导第3步
4.单击或选择 Place all certificates in
个人商店:
证书导入向导第4步
pkcs12通常包括完整链、CA和中间证书。如果是这种情况,您必须确保CA已安装在受信任的根证书颁发机构库上。
Windows CA证书安装
如果CA不在受信任的根证书颁发机构存储中,请使用以下步骤进行安装:
1.打开CA pem或crt文件,单击或选择“安装证书”,如图所示。
CA 证书
如果CA不在受信任的根证书颁发机构存储上,您将看到以下消息:“此CA根证书不受信任....”
2.单击或选择存储位置本地计算机:
CA证书导入向导第1步
3.单击或选择 Place all certificates in the following store
和 Trusted Root Certification Authorities
商店:
CA证书导入向导第2步
4.完成证书导入向导:
CA证书导入向导第3步
证书安装始终可以通过 Windows Key+R
和打开 mmc.exe
或 certlm.msc
.
重要详细信息
- “IPSec IKE intermediate”(OID = 1.3.6.1.5.5.8.2.2)必须用作EKU,如果以下两个语句均适用:
- IKEv2服务器是Windows 2008服务器。
- 有多个服务器身份验证证书用于IKEv2连接。如果为true,则将“Server Authentication” EKU和“IPSec IKE Intermediate” EKU都放置在一个证书上,或者在证书中分发这些EKU。确保至少一个证书包含“IPSec IKE Intermediate” EKU。
有关详细信息,请参阅排除IKEv2 VPN连接故障。
- 在FlexVPN部署中,请勿在EKU中使用“IPSec IKE Intermediate”。如果这样做,IKEv2客户端不会获取IKEv2服务器证书。因此,它们无法从IKE_SA_INIT响应消息中的IOS响应CERTREQ,因此无法使用默认错误ID13806接。
- 虽然主题备用名称(SAN)不是必需的,但如果证书有此名称,则可以接受。
- 在Windows 10/11客户端证书存储区上,确保机器信任的根证书颁发机构存储区具有尽可能少的证书数量。如果超过50个,Cisco IOS可能无法读取整个Cert_Req负载,该负载包含Windows 10/11框中所有已知CA的证书可分辨名称(DN)。因此,协商失败,您会看到客户端上的连接超时。
验证
使用本部分可确认配置能否正常运行。
CSR1Kv# show crypto ikev2 session detail
IPv4 Crypto IKEv2 Session
Session-id:6, Status:UP-ACTIVE, IKE count:1, CHILD count:1
Tunnel-id Local Remote fvrf/ivrf Status
1 10.0.3.1/4500 192.168.56.1/4500 none/none READY
Encr: AES-CBC, keysize: 256, Hash: SHA96, DH Grp:2, Auth sign: RSA, Auth verify: RSA
Life/Active Time: 86400/5s 7 sec
CE id: 1007, Session-id: 6
Status Description: Negotiation done
Local spi: 3A330D1951062E50 Remote spi: 222ED6C38002E26D
Local id: ikev2.cisco.com
Remote id: ou=TAC,o=Cisco,c=BE,cn=Winclient
Local req msg id: 0 Remote req msg id: 2
Local next msg id: 0 Remote next msg id: 2
Local req queued: 0 Remote req queued: 2
Local window: 5 Remote window: 1
DPD configured for 0 seconds, retry 0
NAT-T is not detected
Cisco Trust Security SGT is disabled
Assigned host addr: 172.16.0.105
Initiator of SA : No
Child sa: local selector 0.0.0.0/0 - 255.255.255.255/65535
remote selector 172.16.0.105/0 - 172.16.0.105/65535
ESP spi in/out: 0xB01348F5/0x142CEC36
AH spi in/out: 0x0/0x0
CPI in/out: 0x0/0x0
Encr: AES-CBC, keysize: 128, esp_hmac: SHA96
ah_hmac: None, comp: IPCOMP_NONE, mode tunnel
CSR1Kv#show crypto ipsec sa peer 192.168.56.1
interface: Virtual-Access1
Crypto map tag: Virtual-Access1-head-0, local addr 10.0.3.1
protected vrf: (none)
local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
remote ident (addr/mask/prot/port): (172.16.0.105/255.255.255.255/0/0)
current_peer 192.168.56.1 port 4500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 223, #pkts encrypt: 223, #pkts digest: 223
#pkts decaps: 315, #pkts decrypt: 315, #pkts verify: 315
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0
local crypto endpt.: 10.0.3.1, remote crypto endpt.: 192.168.56.1
plaintext mtu 1438, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet1
current outbound spi: 0x142CEC36(338488374)
PFS (Y/N): N, DH group: none
inbound esp sas:
spi: 0xB01348F5(2954053877)
transform: esp-aes esp-sha-hmac ,
in use settings ={Tunnel, }
conn id: 2017, flow_id: CSR:17, sibling_flags FFFFFFFF80000048, crypto map: Virtual-Access1-head-0
sa timing: remaining key lifetime (k/sec): (4607961/2461)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE(ACTIVE)
inbound ah sas:
inbound pcp sas:
outbound esp sas:
spi: 0x142CEC36(338488374)
transform: esp-aes esp-sha-hmac ,
in use settings ={Tunnel, }
conn id: 2018, flow_id: CSR:18, sibling_flags FFFFFFFF80000048, crypto map: Virtual-Access1-head-0
sa timing: remaining key lifetime (k/sec): (4607987/2461)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE(ACTIVE)
outbound ah sas:
outbound pcp sas:
故障排除
您可以使用以下调试排除FlexVPN连接和证书协商故障:
debug crypto condition peer <remove client public ip>
debug crypto ikev2
debug cry pki messages
debug cry pki transactions
在Windows客户端中,您可以检查Windows日志下的事件查看器,并检查应用程序,VPN连接事件使用源RasClient。例如;
RasClient的Windows事件查看器日志