如何使用 strongswan 公钥认证禁用特定用户的访问?
因此,我已使公钥身份验证正常工作。SAN 是电子邮件,是 ID。有没有办法拒绝特定用户 ID(rightid)的身份验证?我希望能够轻松地关闭和打开用户访问权限,我意识到我可以通过 psk 身份验证通过删除机密文件中的条目来实现。我希望有一种方法可以处理证书。我会以“保留”为由撤销证书,但 strongswan 的 pki 不支持取消撤销功能。我还尝试设置一个陷阱来拒绝身份验证,但没有成功。必须能够指定允许哪些客户端 ID 连接
conn main
leftauth=pubkey
leftcert=servercert.pem
rightauth=pubkey
leftid=mydomain.com
type=tunnel
left=%any
leftsubnet=0.0.0.0/0
right=%any
rightsubnet=192.168.137.0/24
esp=aes128gcm16-sha256-modp3072
ike=aes128gcm16-sha256-modp3072
keyexchange=ikev2
ikelifetime=28800s #Time before re authentication of keys
auto=add
conn close
also=main
[email protected]
rightauth=never
auto=route
答案1
虽然目前没有插件可以将单个身份(或证书/密钥)列入黑名单,但白名单插入提供一种将所有允许的身份列入白名单的方法。它附带一个命令,用于在 IKE 守护程序运行时管理白名单。
可以通过以下方式以更动态的方式执行类似操作(例如拒绝所有符合特定模式的身份):外部认证插入。配置的脚本(或命令)在客户端身份验证成功后调用,并在IKE_REMOTE_ID
环境变量中接收客户端身份。如果命令以除 之外的任何内容退出0
,则客户端将被拒绝。
从技术上讲,阻止客户端证书的正确方法是通过 CRL 或 OCSP。请注意,“保留”原因(--reason certificate-hold
带有pki --signcrl
)主要适用于使用增量 CRL 的情况,因为此类撤销可以通过“removeFromCRL”原因在增量 CRL 中恢复(strongSwan 目前根本不支持)。但正如您所指出的,当使用基于旧 CRL 创建新的完整 CRL 的选项时,该pki
命令目前也不支持省略(即恢复)某些撤销。--lastcrl
虽然您可以从头开始创建一个包含所有当前已撤销证书的新 CRL,但问题是目前无法手动指定cRLNumber
已颁发 CRL 的序列号 ()。除非使用--lastcrl
(或--basecrl
),否则它将始终为 1。并且使用相同(或更低)的序列号,CRL 在重新加载时不会被替换(除非您在加载之前完全清除所有凭据和缓存,这只能通过swanctl
一种激烈的措施来实现 - 就像重新启动 IKE 守护程序只是为了重新加载 CRL 一样)。
使用 OCSP 可能是一种选择,因为例如,openssl ocsp
你可以提供一个简单的索引文件,你可以手动创建和修改它(参见例如我的答案在这里有关格式的描述)。除了必须运行该附加服务之外,一个可能的缺点是 OpenSSL 要求索引还包含所有当前有效的证书。