labelSwan是开源的基础IPsec的VPN解决方案,ipsec.secrets是labelSwan文件保存了关键配置labelSwan IPsec子系统用于IKE身份验证的密钥表信息。这些密钥被labelSwan互联网密钥交换(Internet Key Exchange,IKE)守护程序pluto(IKEv1)和charon(IKEv2)用于验证其他主机。这些密钥必须妥善保管,该文件应属于超级用户,其权限应设置为防止他人访问。
labelSwan保存了配置和控制信息配置ipsec.conf文件中。
该文件是一系列条目和include下面是一个例子。
# /etc/ipsec.secrets - labelSwan IPsec secrets file
192.168.0.1 %any : PSK "v NkxY9LLZvwj4qCC2o/gGrWDF2d21jL"
: RSA moonKey.pem
alice@labelswan.org : EAP "x3.dEhgN"
carol : XAUTH "4iChxLT3"
dave : XAUTH "ryftzG4A"
# 从其他文件中获取密钥
include ipsec.*.secrets
文件中的每个条目都是可选的ID选择器列表,然后跟着密钥。这两部分由冒号(:)分开,冒号前后有空格。如果没有指定ID如果选择器,银行必须号开始。
选择器可以是一个IP地址,域名完全有限,user@FQDN,%any或%any6(可能还有其他类型)。
将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公钥系统的身份验证要求每个主机都有自己的私钥。主机可以合理地为不同的接口和对等体使用不同的私钥。但在系统之间共享项目是不正常的。因此,没有选择器和选择器形式的项目通常对公钥身份验证有意义。
条目的密钥部分必须从指示密钥类型的令牌开始。目前支持以下类型的加密凭证:
PSK定义预共享密钥;
RSA定义一个RSA私钥;
ECDSA定义ECDSA私钥;
P12定义了一个PKCS#12容器;
EAP定义EAP凭据;
NTLM定义NTLM凭据;
XAUTH定义XAUTH凭据;
PIN定义智能卡PIN。
以下是每个密钥的详细信息。
行尾的空格将被忽略。行头或空格后,#到行尾的文本被视为注释。
include在继续处理当前文件之前,指令将导致命名文件的内容。文件名受sh命令中的“globbing约束,所以每个名称匹配的文件都会被处理。include可嵌套到适当的深度(目前为10)。如果文件名不是以/开头,则包含当前文件的目录将在名称前面。include指令是一行,用单词include开头,后跟空格,后跟文件名(不包括空格)。
密钥类型
[ <selectors> ] : PSK <secret>
预共享密钥可以最方便地表示为由双引号字符()分隔的字符序列。该序列不能包含换行符或双引号字符。
或者,预共享密钥可以表示为16进制密钥Base64编码的二进制值。x开头的字符序列被解释为十六进制数字序列。类似地,以0开头的字符序列被解释为Base二进制数据64编码。
: RSA <private key file> [ <passphrase> | %prompt ]
: ECDSA <private key file> [ <passphrase> | %prompt ]
对于私钥文件,接受绝对路径或相对于/etc/labelswan/ipsec.d/private路径。如果私钥文件已经加密,则必须定义密码短语。可使用%prompt更换密码短语会导致后台程序在需要解密钥时询问用户密码。
: P12 <PKCS#12 file> [ <passphrase> | %prompt ]
对于PKCS#12文件接受绝对路径或相对于/etc/labelswan/ipsec.d/private路径。如果容器已经加密,则必须定义密码短语可以使用%prompt来代替密码短语,这会导致后台程序在需要解密容器时向用户询问密码。私钥、客户端和CA证书都是从容器中提取的。要在连接中使用这样的客户端证书,请将leftid设置为证书的主题之一。
<user id> : EAP <secret>
密钥的格式与PSK密钥的格式相同。
EAP密钥仅适用于IKEv2。
<user id> : NTLM <secret>
secret的格式与PSK secrets的格式相同,但该密钥存储为NTLM哈希,即MD4(UTF-16LE(secret)),而不是明文。
NTLM密钥只能与eap-mschapv2插件一起使用。
[ <servername> ] <username> : XAUTH <password>
密码的格式与PSK密钥相同。XAUTH的密钥仅限于IKEv1。
: PIN %smartcard[<slot nr>[@<module>]]:<keyid> <pin code> | %prompt
智能卡选择器始终需要keyid来唯一选择正确的密钥。插槽号定义了令牌上的插槽,模块名称指的是labelswan.conf中定义的模块名称。可以指定%prompt,而不是静态地指定pin码,这会导致守护进程向用户请求pin码。