ipsec.secrets 文件,它是 strongSwan 中用于存储各种密钥和凭据的配置文件。 但使用 ipsec.conf 和 ipsec.secrets 等配置文件以及 ipsec 命令的方式已经被弃用,建议迁移到 swanctl.conf 和 swanctl 命令,或者直接使用 Vici API。
总结和要点:
-
弃用声明 (Deprecation Notice):
- 官方不推荐使用
ipsec.conf,ipsec.secrets和ipsec命令。 - 建议使用
swanctl.conf和swanctl命令,或者直接使用 Vici API。
- 官方不推荐使用
-
ipsec.secrets文件作用:- 用于存储 strongSwan 使用的各种密钥和凭据。
- 可以存储多种类型的密钥,例如 RSA 私钥、ECDSA 私钥、预共享密钥 (PSK)、EAP 凭据、XAUTH 凭据等。
-
支持的密钥类型:
RSA: RSA 私钥ECDSA: ECDSA 私钥BLISS: BLISS 私钥 (5.2.2 版本及以上)P12: PKCS#12 容器 (5.1.0 版本及以上)PSK: 预共享密钥 (Pre-Shared Key)EAP: EAP 凭据NTLM: NTLM 凭据XAUTH: XAUTH 凭据PIN: 智能卡 PIN
-
文件格式:
- 忽略行尾的空白字符。
- 以
#开头的行是注释。
-
include指令:- 可以使用
include指令包含其他文件。 - 文件名可以使用通配符。
- 支持嵌套包含,但有深度限制 (目前为 10 层)。
- 如果文件名不以
/开头,则会在文件名前面加上当前文件所在的目录。
- 可以使用
-
ID 选择器 (ID Selectors):
- 每个密钥可以有一个或多个可选的 ID 选择器。
- ID 选择器用于指定密钥适用的连接。
- 如果没有指定 ID 选择器,则该密钥适用于所有连接。
- ID 选择器可以是 IP 地址、FQDN (完全限定域名)、
user@FQDN、%any或%any6。 - 从 5.4.0 版本开始,ID 选择器还可以是 IPv4 和 IPv6 子网 (CIDR 格式) 以及地址范围 (两个地址用
-分隔)。 %any匹配任何 IPv4 地址,%any6匹配任何 IPv6 地址。 在旧版本中,0.0.0.0可以代替%any。
-
ID 匹配规则:
- ID 必须精确匹配。
- 对于 Road Warrior 连接,如果对端的 ID 是 IP 地址,且没有找到精确匹配的 ID 选择器,则
%any或%any6可以匹配对端的 IP 地址。 - IKEv1 中,使用预共享密钥认证时,responder 需要在解码对端 ID 之前查找密钥,因此使用的 ID 是 IP 地址。
-
密钥匹配优先级:
- 选择最具体匹配的密钥。
- 没有 ID 选择器的条目匹配任何 host 和 peer。
- 一个 ID 选择器的条目匹配 host ID。
- 多个 ID 选择器的条目匹配 host ID 和 peer ID。
- 对于公钥认证,如果只有 host ID 匹配,也认为是匹配的。
- 允许有两个最佳匹配条目,只要它们使用的密钥相同。
-
预共享密钥 (PSK) 认证:
- 需要 host 和 peer 都找到相同的密钥。
- 如果 host 和 peer 都出现在选择器列表中,则同一个条目适用于两个系统。
- 多个选择器的条目最适合 PSK 认证。
-
公钥认证 (例如 RSA):
- 每个 host 需要有自己的私钥。
- host 可以为不同的接口和 peer
ID 选择器
每个 secret 的前面可以有一个可选的 ID 选择器列表。这两个部分由冒号(:)隔开,冒号周围是空格。如果没有指定ID选择器,该行必须以冒号开头。
选择器是 IP 地址、完全限定域名、user@FQDN、%any 或 %any6。自 5.4.0 以来,CIDR 表示法中的 IPv4 和IPv6 子网和地址范围(两个地址用a -分隔,不带任何空格)也可以用作选择器。有关如何解析身份的详细信息,请参阅 IdentityParsing。
用选择器匹配 id 相当简单:它们必须相等。在 Road Warrior 连接的情况下,如果没有找到对等体 ID 的匹配,并且它是 IP 地址的形式,选择器 %any 将匹配对等体的 IP 地址,如果是 IPV4,选择器 %any6 将匹配对等体的 IP 地址,如果是 IPv6。目前,可以使用过时的符号 0.0.0.0 来代替 %any。
当使用 IKEv1 时,通过预共享密钥进行身份验证的情况会产生额外的复杂性:响应方需要在对等方的 ID 有效负载被解码之前查找密钥,因此使用的 ID 将是 IP 地址。
要验证两台主机之间的连接,需要使用与主机和对等体 id 最匹配的条目。没有选择符的条目将匹配任何主机和对等体。更具体地说,如果选择器匹配主机的 ID(不考虑对等体),则具有一个选择器的条目将匹配主机和对等体。
更具体地说,如果主机 ID 和对等体 ID 都匹配其中一个选择器,那么具有多个选择器的条目将匹配主机和对等体。如果密钥是用于非对称身份验证技术(例如 RSA 之类的公钥系统),则具有多个选择器的条目将匹配主机和对等体,即使只有主机 ID 匹配选择器(假定选择器是主机的所有身份)。两个条目可以是最佳匹配,只要它们在密钥或私钥方面达成一致。
预共享密钥身份验证要求两个系统都找到相同的密钥(该密钥实际上不是由 IKE 协议传输的)。如果主机和对等体都出现在选择器列表中,则同一条目将适用于两个系统,因此可以使用系统之间的逐字复制。这自然会扩展到更大的群体,共享相同的秘密。因此,多选择器项最适合PSK身份验证。
RSA 等公钥系统的身份验证要求每个主机都有自己的私钥。主机可以合理地为不同的接口和不同的对等体使用不同的私钥。但是在系统之间共享条目是不正常的。因此,无选择器和单选择器形式的条目通常对公钥身份验证有意义。
secret 格式参考:
# /etc/ipsec.secrets - strongSwan IPsec secrets file
192.168.0.1 : PSK "v+NkxY9LLZvwj4qCC2o/gGrWDF2d21jL"
: RSA moonKey.pem
alice@strongswan.org : EAP "x3.dEhgN"
carol : XAUTH "4iChxLT3"
dave : XAUTH "ryftzG4A"
# get secrets from other files