我正在尝试使用 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 wiki上的 howtos进行 strongSwan 配置、证书创建和证书互操作性建议。strongSwan VPN 网关的完整连接日志和 FreeRadiusradiusd -X
调试输出有点长,需要放在这里,但如果需要,可以使用。
不指定
remote { cacerts= }
。此选项意味着 VPN 客户端应发送其自己的“用户”或“机器”证书以进行 IKE 身份验证,这与您仅使用 EAP 来验证客户端的目标相矛盾。由于您的客户端不发送证书,只发送密码,因此它们永远不会匹配此连接。您甚至应该添加
send_certreq=no
以使 strongSwan 不请求证书,因为它无论如何都不会被验证(这可能会通过不让服务器发送大量可接受的 CA 来大大加快握手速度,否则默认情况下会这样做)。(同时使用证书和 MSCHAP 并非不可能,但是……如果您有客户端证书,则可以首先将它们用于身份验证,而完全不用 RADIUS 或 MSCHAP。)
请注意,
version
andproposals
(andsend_certreq
) 应该在连接级别指定,而不是在 children{} 内,因为它们是“全局”IKE 参数。(strongSwan wiki 中的示例似乎是错误的。)