ocserv: 如何识别正在连接的用户信息?

2015 年 1 月 30 日
 abcdabcd987

我用 ocserv 搭建了一个 AnyConnect 服务器,用的是 certificate 验证模式,我想对每个用户做流量统计。

我从样例配置文件里面知道 ocserv 支持 connect-script ,并且会把 REASON, USERNAME, GROUPNAME, HOSTNAME, DEVICE, IP_REAL, IP_LOCAL, IP_REMOTE 作为变量传递给脚本。但问题是,我写了一个脚本把以上变量打印出来,结果 USERNAME, GROUPNAME, HOSTNAME 是空的,这样就无法识别用户了。

所以应该怎么解决呢?

9538 次点击
所在节点    问与答
12 条回复
azuis
2015 年 1 月 30 日
证书认证是没有 USERNAME 的。
abcdabcd987
2015 年 1 月 30 日
@azuis 呃,那市面上卖的 AnyConnect 都是用用户名密码认证的吗?每次输入密码觉得好麻烦
zk8802
2015 年 1 月 30 日
配置文件中可以开启 cert-user-oid 和 cert-group-oid,这样就能用证书中得到用户名和组名了。
我的 Cisco AnyConnect 是通过证书认证的,做起来不难。
abcdabcd987
2015 年 1 月 30 日
@zk8802 对对对,我有看到这两条,但是我昨天试了下,不知道那两个值要怎么填,求教??
zk8802
2015 年 1 月 30 日
这两条的含义就是从客户端证书中取出与指定 OID 对应的项作为 username 和 groupname。只要指定好 OID 就可以了。
例如要使用证书的 CommonName 作为 username,就写 cert-user-oid = 2.5.4.3。
在 ocserv 中,这个功能是通过调用 gnutls_x509_crt_get_dn_by_oid() 来实现的,请参考 worker-auth.c 的 get_cert_names() 函数。

X.509 OID 的列表: https://technet.microsoft.com/en-us/library/cc772812(WS.10).aspx
关于 OID 的介绍: http://en.wikipedia.org/wiki/Object_identifier
abcdabcd987
2015 年 1 月 30 日
@zk8802 啊,太感谢了,原来昨天我理解错了那行注释的意思…… It Works!
zk8802
2015 年 1 月 30 日
嗯,不用谢。
pfitseng
2015 年 1 月 30 日
楼主写的脚本能共享一下吗
exodusbo
2015 年 2 月 22 日
@abcdabcd987 请教楼主的script方法
mvevooceanjc
2015 年 4 月 20 日
@abcdabcd987 请问楼主是如何实现的证书验证的同时分组的呢?我在验证的时候会出现以下错误:sec-mod: user '' requested group 'group2' but is not included on his certificate groups,证书里面的组是group1。。。无力了,求解啊,谢谢!!
Vicer
2017 年 1 月 26 日
@zk8802 是否能给一个证书,分配两个分组?
RandomUser
2017 年 3 月 9 日
@mvevooceanjc 我也碰到这个问题了,请问后来解决了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/166677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX