如何从OpenVPN提取客户端证书信息?

3 投票
1 回答
3470 浏览
提问于 2025-04-17 12:47

当用户连接到我的OpenVPN服务器时,我想提取客户端证书的ID。

这样做的目的是为了写一个脚本,防止用户把他们的证书分享给别人。目前,任何证书都可以和任何有效的LDAP用户一起使用。

当我设置了 script-security 3,这似乎能给 env 变量提供最多的信息时,我在这篇帖子底部看到了这些变量(实际值已去掉)。据我所知,里面没有任何东西可以和用户使用的证书关联起来。

问题

我该如何获取客户端的证书/密钥ID,以便我可以和 /etc/openvpn/easy-rsa/2.0/keys/*{.crt,.csr,.key} 进行匹配?文件名就是LDAP用户名。

例如:

/etc/openvpn/easy-rsa/2.0/keys/bob.crt
/etc/openvpn/easy-rsa/2.0/keys/bob.csr
/etc/openvpn/easy-rsa/2.0/keys/bob.key

环境变量的转储

X509_1_OU=
common_name=
route_gateway_1=
ifconfig_remote=
untrusted_ip=
ifconfig_local=
proto_1=
tls_serial_1=
tls_serial_0=
tun_mtu=
X509_1_emailAddress=
tls_id_0=
X509_1_L=
tls_id_1=
X509_1_O=
password=
script_type=
verb=
username=
local_port_1=
config=
X509_0_CN=
dev=
auth_control_file=
X509_1_C=
X509_1_ST=
route_network_1=
remote_port_1=
PWD=
route_net_gateway=
daemon=
X509_1_name=
untrusted_port=
SHLVL=
script_context=
route_vpn_gateway=
route_netmask_1=
daemon_start_time=
X509_0_ST=
daemon_pid=
X509_1_CN=
X509_0_OU=
X509_0_emailAddress=
daemon_log_redirect=
X509_0_C=
X509_0_L=
link_mtu=
X509_0_O=

1 个回答

1

这个 crt 是由 key 签名的。你不能随便改动 crt,如果想改,就得重新生成一个 csr,然后再用 key 签名一次。我不是专家,所以不太清楚具体哪些地方不能改,但有些字段是客户端不能随便改的,否则就会影响证书的有效性。根据我在维基百科上看到的,似乎你不能改动主题属性(比如 CN 等)。

所以,如果你要验证用户 bob,用的是 bob.crt,那就要确保证书里的 CN 是 bob。只要这三项都匹配,就说明 bob 是用自己的证书登录的。

撰写回答