strongSwan之ipsec.secrets配置手册

简介: strongSwan之ipsec.secrets配置手册

strongSwan是一个开源的基于IPsec的VPN解决方案,ipsec.secrets是strongSwan的关键配置,文件保存了strongSwan IPsec子系统用于IKE身份验证的密钥表信息。这些密钥被strongSwan互联网密钥交换(Internet Key Exchange,IKE)守护程序pluto(IKEv1)和charon(IKEv2)用于验证其他主机。这些密钥必须被妥善保管,该文件应为超级用户所有,其权限应设置为阻止其他人的所有访问。


strongSwan的配置和控制信息配置保存在ipsec.conf文件中。


该文件是一系列条目和include指令。下面是一个例子。



 # /etc/ipsec.secrets - strongSwan IPsec secrets file
 192.168.0.1 %any : PSK "v+NkxY9LLZvwj4qCC2o/gGrWDF2d21jL"
 : RSA moonKey.pem
 alice@strongswan.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>

预共享密钥可以最方便地表示为一个字符序列,该序列由双引号字符(“)分隔。该序列不能包含换行符或双引号字符。


或者,预共享的密钥可以表示为十六进制或Base64编码的二进制值。以0x开头的字符序列被解释为十六进制数字序列。类似地,以0开头的字符序列被解释为Base64编码的二进制数据。

 : RSA <private key file> [ <passphrase> | %prompt ]
 : ECDSA <private key file> [ <passphrase> | %prompt ]

对于私钥文件,接受绝对路径或相对于/etc/strongswan/ipsec.d/private的路径。如果私钥文件已加密,则必须定义密码短语。可以使用%prompt来代替密码短语,这会导致后台程序在需要解密密钥时询问用户密码。

 : P12 <PKCS#12 file> [ <passphrase> | %prompt ]

对于PKCS#12文件,接受绝对路径或相对于/etc/strongswan/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来唯一选择正确的密钥。插槽号定义了令牌上的插槽,模块名称指的是strongswan.conf中定义的模块名称。可以指定%prompt,而不是静态地指定pin码,这会导致守护进程向用户请求pin码。

相关文章
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
164633 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
7月前
|
人工智能 安全 API
HarmonyOS5云服务技术分享--登录邮件功能整理
本文详细解析了HarmonyOS认证服务中基于ArkTS API 12的邮箱登录全流程,涵盖注册、密码登录、验证码登录、敏感操作处理及密码重置等功能。通过清晰的代码示例与注意事项说明,帮助开发者快速实现安全可靠的邮箱认证流程,同时提供账号关联、风控策略等扩展建议,助力优化用户体验。适合初学者与进阶开发者参考实践。
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
1037 1
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
18904 31
|
缓存 安全 应用服务中间件
Web安全-HTTP Host头攻击
Web安全-HTTP Host头攻击
915 7
阿里云国际版提交工单后需要多久才能解决问题
阿里云国际版提交工单后需要多久才能解决问题
|
网络协议 算法 Linux
在Linux中,TCP/IP协议栈的工作原理是什么?
在Linux中,TCP/IP协议栈的工作原理是什么?
|
机器学习/深度学习 算法 C语言
【深度学习】优化算法:从梯度下降到Adam
【深度学习】优化算法:从梯度下降到Adam
500 1
|
存储 人工智能 Kubernetes
阿里云ACK助力GPU成本优化,实现灵活管理
摘要:本文将介绍如何在阿里云容器服务ACK中,利用cGPU技术,共享GPU算力,提高GPU利用率,降低TCO。
347 2
|
算法 网络协议 安全
strongswan之ipsec.conf配置手册(上)
strongswan之ipsec.conf配置手册