目前,我使用以下配置。我应该切换到rekey=yes
,如果是,为什么?我希望强制执行完美前向保密 (PFS)。欢迎提出其他安全建议。
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=never
conn ikev2
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
ike=aes256gcm16-sha384-modp3072!
esp=aes256gcm16-sha384-modp3072!
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=my-vpn.com
leftcert=vpn-server.crt
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-tls
rightdns=1.1.1.1,1.0.0.1
rightsourceip=%dhcp
rightsendcert=never
eap_identity=%identity
完美前向保密 (PFS) 是 IKEv2 的固有部分,因为每个 IKE_SA 的密钥材料都来自短暂的 Diffie-Hellman (DH) 交换,并且(希望)重用 DH 因素不是一种非常普遍的做法(strongSwan 没有去做)。
因此,即使不重新加密每个新的 IKE_SA 也将使用独立的密钥。除非使用无子 IKE_SA 启动 ( RFC 6023 ),否则第一个 CHILD_SA 的密钥始终来自该密钥材料。如果创建了额外的 CHILD_SA(不是您的配置的情况),它们可以选择从单独的 DH 交换中派生密钥。
重新加密 IKE_SA 始终需要使用 DH 交换来创建完全独立的密钥材料,在重新加密 CHILD_SA 时它是可选的。同样,在没有 DH 交换的情况下,CHILD_SA 密钥来自 IKE_SA 的密钥材料。这意味着根据 IKE_SA 是否在 CHILD_SA 之前已重新生成密钥,新的 CHILD_SA 密钥与之前的 CHILD_SA 使用的密钥无关。
因此,密钥更新基本上控制了多长时间,或者对于 CHILD_SA 还控制了多少数据包/字节,使用了一组特定的密钥,即记录所有流量的对手在成功攻击单个 DH 交换后可以解密多少数据。因此,是否使用密钥更新以及在什么时间间隔取决于您在这些方面的策略/偏好(还取决于您希望一次建立连接的时间)。
对于 IKE_SA,也可以使用重新认证(
reauth=yes
在 ipsec.conf 中)而不是重新生成密钥,这会从头开始(在拆除以前的 SA 之前或之后)创建一个新的 IKE_SA 及其 CHILD_SA。例如,这可以用来确保客户端仍然可以访问智能卡上的私钥。但是,该过程不像内联密钥更新那样顺利,因此可能会丢弃一些数据包(特别是如果使用默认的 break-before-make reauthentication)。