【问题标题】:How to extract client certificate info from OpenVPN?如何从 OpenVPN 中提取客户端证书信息?
【发布时间】:2012-02-10 18:22:33
【问题描述】:

当用户连接到我的 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

env 变量的转储

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=

【问题讨论】:

  • OpenVPN 的转储似乎有问题。提供 openssl x509 -in certificate.pem -text -noout 的编辑输出。我猜/预测应该从证书主题的通用名称部分中提取用户名。
  • 感谢您指出这一点。我已经从输出中删除了实际值,只保留了变量名。更新了帖子。
  • 所以,不是 common_name 或 username?
  • @Ivo :我现在尝试将客户端 crt 文件中的 CN 更改为其他内容,common_name 仍然相同。这是否意味着common_name 编码在crt 文件中,客户端不能只是更改/伪造这个?
  • @SandraSchlichting crtkey 签名。如果不生成新的csr 并再次使用key 签名,则无法更改crt。我不是专家权威,所以我不知道是哪个,但是应该有一些字段是客户端在不破坏证书验证的情况下无法更改的。查看wiki page,在我看来您无法更改主题属性(CN 等)。

标签: python linux perl bash openvpn


【解决方案1】:

crtkey 签名。如果不生成新的csr 并再次使用key 签名,则无法更改crt。我不是专家权威,所以我不知道是哪个,但是应该有一些字段是客户端在不破坏证书验证的情况下无法更改的。查看wiki 页面,在我看来您无法更改主题属性(CN 等)。

因此,如果您使用bob.crt 验证用户bob,请确保在证书中CN 是bob。匹配所有这三个应该意味着 bob 正在使用他自己的证书登录。

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多