V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
abcdabcd987
V2EX  ›  问与答

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

  •  
  •   abcdabcd987 · 2015-01-30 08:46:09 +08:00 · 8883 次点击
    这是一个创建于 3618 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    所以应该怎么解决呢?

    12 条回复    2017-03-09 17:25:34 +08:00
    azuis
        1
    azuis  
       2015-01-30 08:53:37 +08:00
    证书认证是没有 USERNAME 的。
    abcdabcd987
        2
    abcdabcd987  
    OP
       2015-01-30 09:13:39 +08:00
    @azuis 呃,那市面上卖的 AnyConnect 都是用用户名密码认证的吗?每次输入密码觉得好麻烦
    zk8802
        3
    zk8802  
       2015-01-30 09:21:49 +08:00
    配置文件中可以开启 cert-user-oid 和 cert-group-oid,这样就能用证书中得到用户名和组名了。
    我的 Cisco AnyConnect 是通过证书认证的,做起来不难。
    abcdabcd987
        4
    abcdabcd987  
    OP
       2015-01-30 09:23:15 +08:00
    @zk8802 对对对,我有看到这两条,但是我昨天试了下,不知道那两个值要怎么填,求教??
    zk8802
        5
    zk8802  
       2015-01-30 09:42:38 +08:00   ❤️ 4
    这两条的含义就是从客户端证书中取出与指定 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
        6
    abcdabcd987  
    OP
       2015-01-30 09:51:18 +08:00
    @zk8802 啊,太感谢了,原来昨天我理解错了那行注释的意思…… It Works!
    zk8802
        7
    zk8802  
       2015-01-30 09:58:06 +08:00
    嗯,不用谢。
    pfitseng
        8
    pfitseng  
       2015-01-30 15:07:07 +08:00
    楼主写的脚本能共享一下吗
    exodusbo
        9
    exodusbo  
       2015-02-22 18:57:49 +08:00
    @abcdabcd987 请教楼主的script方法
    mvevooceanjc
        10
    mvevooceanjc  
       2015-04-20 23:43:32 +08:00
    @abcdabcd987 请问楼主是如何实现的证书验证的同时分组的呢?我在验证的时候会出现以下错误:sec-mod: user '' requested group 'group2' but is not included on his certificate groups,证书里面的组是group1。。。无力了,求解啊,谢谢!!
    Vicer
        11
    Vicer  
       2017-01-26 10:38:37 +08:00 via Android
    @zk8802 是否能给一个证书,分配两个分组?
    RandomUser
        12
    RandomUser  
       2017-03-09 17:25:34 +08:00
    @mvevooceanjc 我也碰到这个问题了,请问后来解决了吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3219 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:47 · PVG 20:47 · LAX 04:47 · JFK 07:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.