OpenWRT 路由器 OpenConnect VPN 详细图文教程 – 证书配置篇
本文最后更新于482 天前,其中的信息可能已经过时,如有错误请发送邮件到84581927@qq.com

,本文将介绍通过部署自签 CA 根证书和客户端用户证书来实现更安全和方便的登录方式.

经过参考网上的各种教程,以及朋友的指导和交流,实现了证书颁发,吊销,取消吊销.并在各种场景下完成了几种不同需求的登录方式测试.踩过各种坑后终于完美实现了整个使用环境的部署流程.特将详细步骤和重点整理出图文教程,供大家参考.

本文大纲

  • 自签证书
    • 自签 CA 根证书
    • 自签用户证书
    • 吊销用户证书
    • 取消吊销用户证书
  • 编辑模版
    • 参数介绍
    • 多种登录方式
  • 客户端安装配置
    • 客户端下载
    • Windows 客户端安装流程
    • macOS 客户端安装流程
    • iOS 客户端安装流程

自签证书

自签证书参考网上各种教程很容易实现,同时还需要配置服务端模版才能生效启用.当多用户使用时还涉及到吊销证书取消吊销的需求.本文将详细讲解整个完整的流程,并实践测试成功.

重点推荐

提前规划了证书目录和用户目录,方便证书后期的颁发,吊销和取消吊销等管理.推荐把以下所有命令复制到本地编辑器中,使用 Ctrl+F 或 CMD+F 查找并全部替换所有 stille 和 IOIOX 为 自己的ID 和 自己的组织 即可以快速生成属于你自己的整套证书.本文完全属于新手保姆级教程.

创建证书目录

创建ssl目录,以存放ca 根证书相关文件.mkdir -p /etc/ocserv/ssl

创建user目录,以存放用户证书相关文件.mkdir -p /etc/ocserv/ssl/user

创建revoked目录,以存放吊销证书相关文件.mkdir -p /etc/ocserv/ssl/revoked

自签 CA 根证书

创建CA 根证书模版cat >/etc/ocserv/ssl/ca.tmp<<EOF cn = “IOIOX CA” organization = “IOIOX” serial = 1 expiration_days = 3650 ca signing_key cert_signing_key crl_signing_key EOF

生成CA 根证书私钥openssl genrsa -out /etc/ocserv/ssl/ca.key.pem 2048

根据CA 根证书私钥CA 根证书模版生成CA 根证书.certtool –generate-self-signed –hash SHA256 –load-privkey /etc/ocserv/ssl/ca.key.pem –template /etc/ocserv/ssl/ca.tmp –outfile /etc/ocserv/ssl/ca.cert.pem

生成 Diffie-Hellman 密钥certtool –generate-dh-params –outfile /etc/ocserv/ssl/dh.pem

自签用户证书

创建用户证书模版cat >/etc/ocserv/ssl/user/stille.tmp<<EOF cn = “stille” unit = “IOIOX” expiration_days = 3650 signing_key tls_www_client EOF

生成用户证书私钥openssl genrsa -out /etc/ocserv/ssl/user/stille.key.pem 2048

根据用户证书私钥,CA 根证书,CA 根证书私钥,用户证书模版生成用户证书.certtool –generate-certificate –hash SHA256 –load-privkey /etc/ocserv/ssl/user/stille.key.pem –load-ca-certificate /etc/ocserv/ssl/ca.cert.pem –load-ca-privkey /etc/ocserv/ssl/ca.key.pem –template /etc/ocserv/ssl/user/stille.tmp –outfile /etc/ocserv/ssl/user/stille.cert.pem

证书链补全cat /etc/ocserv/ssl/ca.cert.pem >>/etc/ocserv/ssl/user/stille.cert.pem

生成.p12证书文件

由于 macOS 导入证书必须要有密码.务必修改末尾 pass: 后的密码.openssl pkcs12 -export -inkey /etc/ocserv/ssl/user/stille.key.pem -in /etc/ocserv/ssl/user/stille.cert.pem -name “stille” -certfile /etc/ocserv/ssl/ca.cert.pem -caname “IOIOX CA” -out /etc/ocserv/ssl/user/stille.AnyConnect.p12 -passout pass:12345678

至此CA 根证书用户证书已成功生成.将stille.AnyConnect.p12证书拷贝至电脑以备导入使用.
CA 根证书所在路径为: /etc/ocserv/ssl/ca.cert.pem
.p12 用户证书所在路径为: /etc/ocserv/ssl/user/stille.AnyConnect.p12

吊销证书

当颁发多个用户证书来满足多用户使用时,证书分发给各用户后时无法远程吊销.此时如需禁止某用户登录 VPN ,则需生成吊销列表文件,让服务端读取列表文件,当该用户再次登录时,服务端会根据列表禁止登录.

创建空的吊销文件

以下三步为吊销证书创建基础文件,后续吊销或新增吊销,无需在重复此三步.

创建吊销模版cat <<EOF >/etc/ocserv/ssl/revoked/crl.tmpl crl_next_update = 365 crl_number = 1 EOF

创建空的吊销文件touch /etc/ocserv/ssl/revoked/revoked.pem

根据CA 根证书私钥,CA 根证书,吊销模版生成空的吊销列表文件.certtool –generate-crl –load-ca-privkey /etc/ocserv/ssl/ca.key.pem –load-ca-certificate /etc/ocserv/ssl/ca.cert.pem –template /etc/ocserv/ssl/revoked/crl.tmpl –outfile /etc/ocserv/ssl/revoked/crl.pem

吊销用户证书

以上三步为吊销证书创建基础文件,后续吊销或新增吊销,仅需重复以下两步.

需要吊销的用户证书写入吊销文件,例如将stille的证书吊销:cat /etc/ocserv/ssl/user/stille.cert.pem >> /etc/ocserv/ssl/revoked/revoked.pem

根据CA 根证书私钥,CA 根证书,吊销文件,吊销模版写入吊销列表文件.certtool –generate-crl –load-ca-privkey /etc/ocserv/ssl/ca.key.pem –load-ca-certificate /etc/ocserv/ssl/ca.cert.pem –load-certificate /etc/ocserv/ssl/revoked/revoked.pem –template /etc/ocserv/ssl/revoked/crl.tmpl –outfile /etc/ocserv/ssl/revoked/crl.pem

生成吊销列表文件后,需在 OpenConnect VPN 中编辑模版启用吊销证书列表,重启服务生效.详情可继续参考下文的模版编辑.

取消吊销

在多用户使用的场景使用到吊销证书,也可能会有恢复吊销的需求.同样可以根据以下命令实现.

需要注意的是,取消吊销的原理是把 revoked.pem 中 需要取消掉的证书 移除,并更新 crl.pem ,让服务端 不再禁止 该用户登录.
当 revoked.pem 中只有一个证书需要移除,移除后的 revoked.pem 文件为空文件,那么在更新 crl.pem 时,其命令是有所区别的.下文将以两种场景讲解.

当前仅一个已吊销证书,将其恢复使用.

编辑 revoked.pem 删除文件中已吊销的用户证书.删除后的revoked.pem为空文件,以下命令需 删除 --load-certificate /etc/ocserv/template/revoked.pem参数来更新crl.pem.否则会出现以下错误信息:

Generating a signed CRL…
Error loading certificates: No certificate was found.vi /etc/ocserv/ssl/revoked/revoked.pem# 删除取消吊销的用户证书,删除后的 revoked.pem 为空文件.certtool –generate-crl –load-ca-privkey /etc/ocserv/ssl/ca.key.pem –load-ca-certificate /etc/ocserv/ssl/ca.cert.pem –template /etc/ocserv/ssl/revoked/crl.tmpl –outfile /etc/ocserv/ssl/revoked/crl.pem

当前有多个已吊销证书,恢复使用其中一个.

编辑 revoked.pem 找到并删除文件中已吊销的用户证书.由于revoked.pem还存在其他吊销证书的信息,以下命令则需要 继续使用 --load-certificate /etc/ocserv/template/revoked.pem参数来更新crl.pem.vi /etc/ocserv/ssl/revoked/revoked.pem# 删除取消吊销的用户证书certtool –generate-crl –load-ca-privkey /etc/ocserv/ssl/ca.key.pem –load-ca-certificate /etc/ocserv/ssl/ca.cert.pem –load-certificate /etc/ocserv/ssl/revoked/revoked.pem –template /etc/ocserv/ssl/revoked/crl.tmpl –outfile /etc/ocserv/ssl/revoked/crl.pem


编辑模版

参数介绍

以下为默认模版中比较重要的几个参数:#auth = “certificate”auth = “|AUTH|”#ca-cert = /etc/ocserv/ca.pem#crl = /etc/ocserv/crl.pem#cert-user-oid = 0.9.2342.19200300.100.1.1

#auth = “certificate”
证书登录参数,默认被注释禁用.如需证书登录,去掉注释符号#以启用.

auth = “|AUTH|”
账号密码登录参数,默认开启.网上大多教程是以Linux为安装平台.所以此处是auth = "plain[passwd=/etc/ocserv/ocpasswd]",而本文则是部署在OpenWRT上,此处"|AUTH|"大致是调用 Web 管理页面中的用户管理系统.

#ca-cert = /etc/ocserv/ca.pem
CA 根证书路径参数,默认被注释禁用.如需证书登录,去掉注释符号#以启用,并根据上文修改为正确的证书路径.

#crl = /etc/ocserv/crl.pem
吊销列表文件路径,默认被注释禁用.当吊销用户证书时,去掉注释符号#以启用,并根据上文修改为正确的文件路径.

#cert-user-oid = 0.9.2342.19200300.100.1.1
证书用户登录信息,默认被注释禁用.当启用证书登录时,去掉注释符号#以启用,并修改为cert-user-oid = 2.5.4.3即可在后台查看使用证书登录的用户信息.

server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
此两个参数为当使用域名来连接 VPN 时,所需验证的域名证书的绝对路径.

仅账号密码登录

保持默认模版参数为仅使用账号密码登录#auth = “certificate”auth = “|AUTH|”#ca-cert = /etc/ocserv/ca.pem#crl = /etc/ocserv/crl.pem#cert-user-oid = 0.9.2342.19200300.100.1.1

仅证书登录

启用证书登录,禁用账号密码登录.

取消注释 auth = “certificate” 启用证书登录
注释 auth = “|AUTH|” 禁用账号密码登录
取消注释并修改 CA 根证书路径 ca-cert = /etc/ocserv/ssl/ca.cert.pem
取消注释并修改值 cert-user-oid = 2.5.4.3auth = “certificate”#auth = “|AUTH|”ca-cert = /etc/ocserv/ssl/ca.cert.pem cert-user-oid = 2.5.4.3

证书及账号密码双重验证

此方案需同时拥有证书和账号密码才可登录,且账号名需和证书中的用户名保持一致才能搭配使用登录.证书中的用户名取决于用户模版中的 cn 项的值. 已经过实践测试.

取消注释 auth = “certificate” 启用证书登录
取消注释 auth = “|AUTH|” 启用账号密码登录
取消注释并修改 CA 根证书路径 ca-cert = /etc/ocserv/ssl/ca.cert.pem
取消注释并修改值 cert-user-oid = 2.5.4.3auth = “certificate”auth = “|AUTH|”ca-cert = /etc/ocserv/ssl/ca.cert.pem cert-user-oid = 2.5.4.3

证书及账号密码登录并存

推荐此方案,可为自己配置证书以方便安全登录,临时为其他用户分配账号密码登录,方便删除.

取消注释 auth = “certificate” 启用证书登录
取消注释 auth = “|AUTH|” 并修改为 enable-auth = "|AUTH|"
取消注释并修改 CA 根证书路径 ca-cert = /etc/ocserv/ssl/ca.cert.pem
取消注释并修改值 cert-user-oid = 2.5.4.3auth = “certificate”enable-auth = “|AUTH|”ca-cert = /etc/ocserv/ssl/ca.cert.pem cert-user-oid = 2.5.4.3

启用吊销证书列表

注意如没有生成吊销列表文件,请不要启用此参数,否则会导致服务无法启动.
如已生成吊销列表文件,并吊销用户,但未取消注释以启用参数,将无法让服务端读取列表禁止被吊销的用户证书登录.

根据实际情况注释取消注释并修改吊销文件路径 crl = /etc/ocserv/ssl/revoked/crl.pem#crl = /etc/ocserv/crl.pem# 如有吊销用户证书,需取消注释,并修改 crl.pem 路径.crl = /etc/ocserv/ssl/revoked/crl.pem

至此服务端的配置已全部完成

客户端安装配置

Windows 客户端安装配置流程

导入用户证书

双击打开AnyConnect.p12导入证书

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇