Ubuntu下如何通过Token URI获取USB Token内的证书URI
Ubuntu下提取eToken证书URI供openconnect连接VPN操作指南
p11tool --list-tokens输出中Module字段为空,且Token携带Requires login标记,是查询不到内部证书的核心原因:p11-kit全局代理仅能识别到Token接入,未加载对应硬件驱动、未完成PIN认证时,无法读取Token内部存储的受保护对象。
操作步骤
- 第一步:确认PKCS#11驱动路径
安装SafeNet Authentication Client后,eToken对应的驱动库默认路径为/usr/lib/x86_64-linux-gnu/libeTPkcs11.so(32位系统路径为/usr/lib/libeTPkcs11.so),先执行ls 对应路径确认文件存在,不存在则重新安装Token官方客户端。 - 第二步:带认证参数查询证书URI
执行以下命令,替换对应参数后即可列出Token内所有证书:
执行时会交互式提示输入Token的用户PIN(注意不要输管理员SO PIN,SO PIN仅用于Token初始化管理,无法读取用户存储的证书),输入完成后即可输出所有证书的完整URI。p11tool --provider=/usr/lib/x86_64-linux-gnu/libeTPkcs11.so \ --list-all-certs \ --login \ "替换为p11tool --list-tokens输出的Token URL"若需要非交互式输入,可在命令中追加
--set-pin=你的用户PIN参数,生产环境不建议明文写PIN。 - 第三步:替代查询方案(p11tool异常时使用)
不需要依赖p11tool,直接用系统NSS库配套的certutil工具即可查询,已通过modutil将Token加入NSS数据库的前提下,直接执行:
命令执行后会列出Token内所有证书对象,记录证书对应的昵称,openconnect支持直接通过短格式URI调用,不需要拼接完整PKCS#11路径,格式为certutil -d sql:$HOME/.pki/nssdb/ -L -h Solutipkcs11:token=Soluti;object=查到的证书昵称。
验证方法
拿到证书URI后,先执行以下命令验证URI有效性,避免VPN连接时报错:
p11tool --provider=/usr/lib/x86_64-linux-gnu/libeTPkcs11.so --login --export "你的证书URI" | openssl x509 -noout -subject
命令正常输出证书主题信息即代表URI有效,可直接填入openconnect连接配置。
额外注意:如果查询时使用
--list-all参数代替--list-all-certs,会同时列出证书和绑定的私钥对象,直接选择带私钥标记的对象URL填入openconnect即可,避免后续连接时出现找不到对应私钥的报错。
内容的提问来源于stack exchange,提问作者Matheus Correia
相关产品推荐
相关产品推荐

