我正在尝试使用 RADIUS 身份验证配置 strongSwan IPsec VPN。使用 OpenLDAP 对 FreeRadius 进行用户名/密码的实际 EAP-MSCHAPv2 身份验证成功,但随后我被困在以下错误消息中:
Jul 15 21:31:04 odroidc4 charon-systemd[814594]: authentication of '100.80.129.171' with EAP successful
Jul 15 21:31:04 odroidc4 charon-systemd[814594]: constraint check failed: peer not authenticated by CA 'C=DE, O=ahpohl, CN=ahpohl Root CA'
Jul 15 21:31:04 odroidc4 charon-systemd[814594]: selected peer config 'eap-radius' unacceptable: non-matching authentication done
Jul 15 21:31:04 odroidc4 charon-systemd[814594]: no alternative config found
搜索约束检查失败消息没有得到任何结论性结果。我尝试了 Windows 10 Pro 和 iPhone iOS 15.5 客户端,两者都因相同的约束检查而失败。
我如何让检查通过或禁用检查?“对等体”是指客户端还是 RADIUS 服务器?
我使用以下内容swantctl.conf
:
connections {
eap-radius {
pools = ipv4, ipv6
send_cert = always
local {
auth = pubkey
certs = vpnCert.pem
id = vpn.ahpohl.com
}
remote {
auth = eap-radius
cacerts = ahpohlCert.pem
eap_id = %any
}
children {
eap-radius {
local_ts = 0.0.0.0/0, ::/0
esp_proposals = aes256-sha256-sha1-modp2048
}
version = 2
proposals = aes256-sha256-modp2048
}
}
}
pools {
ipv4 {
addrs = 10.10.1.64/26
dns = 192.168.178.1
}
ipv6 {
addrs = 2a02:168:4407:1::/122
dns = fd00::ca0e:14ff:fe0c:e6a5
}
}
CA 和服务器证书是使用 strongSwanpki
工具创建的:
# create CA
pki --gen --type rsa --size 3072 --outform pem > private/ahpohlKey.pem
pki --self --ca --lifetime 3652 --in private/ahpohlKey.pem --dn "C=DE, O=ahpohl, CN=ahpohl Root CA" --outform pem > x509ca/ahpohlCert.pem
# create server certificate:
pki --gen --type rsa --size 3072 --outform pem > private/vpnKey.pem
pki --req --type priv --in private/vpnKey.pem --dn "C=DE, O=ahpohl, CN=vpn.ahpohl.com" --san vpn.ahpohl.com --outform pem > vpnReq.pem
pki --issue --cacert x509ca/ahpohlCert.pem --cakey private/ahpohlKey.pem --type pkcs10 --in vpnReq.pem --serial 01 --lifetime 1826 --flag serverAuth --flag ikeIntermediate --crl https://www.ahpohl.com/crl/ahpohl.crl --outform pem > x509/vpnCert.pem
我按照 StrongSwan 上的操作指南进行操作维基百科有关 strongSwan 配置、证书创建和证书互操作性的建议。strongSwan VPN 网关的完整连接日志和 FreeRadiusradiusd -X
调试输出有点长,不适合放在这里,但如果需要的话可以查看。
答案1
不要指定remote { cacerts= }
。此选项意味着 VPN 客户端应发送自己的“用户”或“机器”证书进行 IKE 身份验证,这与您仅使用 EAP 验证客户端的目标相矛盾。由于您的客户端不发送证书,只发送密码,因此它们永远不会匹配此连接。
你甚至应该添加send_certreq=no
使 strongSwan 不要求一个证书,因为它无论如何都不会被验证(这可能会大大加快握手速度,因为服务器不会发送大量可接受的 CA 列表,否则默认情况下它会发送)。
(同时使用证书和 MSCHAP 并非不可能,但是……如果您有客户端证书,您可以首先使用它们进行身份验证,而不必担心 RADIUS 或 MSCHAP。)
请注意,version
和proposals
(和send_certreq
)应在连接级别指定,不是在 children{} 内,因为它们是“全局”IKE 参数。(strongSwan wiki 中的示例似乎是错误的。)
connections {
vpn {
version = 2
local = { ... }
send_cert = always
remote = { ... }
send_certreq = no
proposals = aes256-sha256-modp2048
children = {
vpn = { ... }
}
pools = ipv4, ipv6
}
}