如何使用 FreeRadius 配置 strongSwan eap-radius 进行 EAP-MSCHAPv2 身份验证?

如何使用 FreeRadius 配置 strongSwan eap-radius 进行 EAP-MSCHAPv2 身份验证?

我正在尝试使用 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。)

请注意,versionproposals(和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
    }
}

相关内容