当前位置:首页 > 群晖专栏 > 技术教程 > 正文内容

OpenWRT 路由器 OpenConnect VPN 详细图文教程 - 证书配置篇

admin5年前 (2020-03-20)技术教程1278

前言

上文详细介绍了 OpenWRT 路由器 OpenConnect VPN 的基础配置,本文将介绍通过部署自签 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.3

auth = "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.3

auth = "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.3

auth = "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
至此服务端的配置已全部完成

客户端安装配置

客户端下载


上篇文章推荐的 Cisco AnyConnect 下载地址:


全平台下载地址

下载地址

Windows 10 操作系统
AnyConnect Mobile 4.8.02045

点击下载

Windows 7/8 操作系统
AnyConnect Mobile 4.7.04056

点击下载

macOS 11 Big Sur
anyconnect-macos-4.9.04043-predeploy-k9
点击下载

macOS 10.15 Catalina
AnyConnect Mobile 4.8.02045

点击下载

macOS Maverick/Yosemite

AnyConnect Mobile 4.7.04056
点击下载

iOS 客户端
Cisco AnyConnect
AppStore 免费下载

Android 客户端
AnyConnect
Google Play 免费下载
点击下载

Linux 系统
AnyConnect-Linux64-4.8.02045
点击下载

Windows 客户端安装配置流程

导入用户证书

双击打开AnyConnect.p12导入证书

下一步

输入生成.p12证书文件时创建的密码

自动选择证书存储

完成导入

确认安全警告

导入成功

安装配置 Windows 客户端

常规安装 Windows 版客户端,打开软件,输入DDNS域名端口连接即可无密码,无任何安全警告提示的登录 VPN.

连接成功

macOS 客户端安装配置流程


前方有坑,提前提醒.注意在首次登录时会提示 使用钥匙串中的私钥 一定要点 始终允许 ,否则后续每次登录都会提示.

导入用户证书

双击打开AnyConnect.p12证书默认添加到登录

输入生成.p12证书文件时创建的密码
11.jpg

添加成功
12.jpg

安装配置 macOS 客户端

双击AnyConnect.pkg安装
13.jpg

仅需安装VPN,取消勾选其他组件.

提示启用系统扩展

偏好设置 - 安全性与隐私 - 解锁允许
16.jpg

系统扩展成功启用,可忽略重新启动电脑.
17.jpg

继续安装组件

安装成功

打开AnyConnect输入DDNS域名端口连接


输入 macOS 的登录密码,务必点击 始终允许.

连接成功

iOS 客户端安装配置流程


iOS 客户端的证书导入相对麻烦,需要使用 http/https 的 url 方式来导入.可以将证书临时存放到网站或者云存储上,待导入完成后在删除以确保安全.

下载 iOS 客户端

AppStore 中搜索并下载名为Cisco AnyConnect的 APP

配置 iOS 客户端

打开 APP - 主页 - 连接 - 添加 VPN 连接 - 输入DDNS域名端口保存 - 允许添加 VPN 配置 - 输入 iPhone 密码

iOS 客户端导入证书

打开 APP - 诊断 - 证书 - 导入用户证书 - 输入AnyConnect.p12url链接 - 输入生成.p12证书文件时创建的密码

连接成功

点击启用连接成功

其他客户端

Android 和 Linux 由于没有相关设备和环境,请自行 Google 搜索相关教程.


结语

至此已完成 OpenConnect VPN 的全部部署流程.如果本文对你有帮助,可以收藏到书签,后期博主在使用过程中发现更多的功能和技巧会再次更新到文章之中.同时感谢以下几篇文章让博主在实践中起到了重要参考作用:



本站提供免费和付费的技术支持.你可以通过留言,邮件,QQ的方式来进行技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面


扫描二维码推送至手机访问。

版权声明:本文由梦魁网络资源站发布,如需转载请注明出处。

本文链接:https://family.monkui.com:39/?id=151

标签: 技术教程
分享给朋友:

相关文章

macOS使用Github上传项目时忽略及删除.DS_Store文件教程

macOS使用Github上传项目时忽略及删除.DS_Store文件教程

前言最近又在折腾和研究Docker和GitHub,虽然不懂写代码,但靠着搜索引擎慢慢摸索,觉得很有意思,于是在Mac上安装了官方GitHub Desktop.使用过程中发现上传代码或者项目时,会把manOS的系统文件.DS_Store文件上...

完美解决ShadowsocksX-NG-R8订阅失败问题

完美解决ShadowsocksX-NG-R8订阅失败问题

前言之前ShadowsocksX-NG-R8一直无法正常使用订阅功能,最近翻查了下GitHub,找到了完美解决方案.根据GitHub上的大神研究,多半与mac系统ATS机制有关,MACOS 新版本中新增App Transport Secur...

使用群晖系统自带的DDNS接口更新阿里云域名

使用群晖系统自带的DDNS接口更新阿里云域名

组黑群晖大概3年多了,一直使用阿里云DDNS实现外网访问。之前一直使用爱快软路由解析阿里云使用,也挺方便的,建议搞不定的童鞋使用爱快进行解析最好,省事又方便,后面为了应对别的用户和童鞋,下面说说使用群晖系统自带的DDNS接口怎样进行解析使用...

OpenWRT 配置 WireGuard 服务端及客户端配置教程

OpenWRT 配置 WireGuard 服务端及客户端配置教程

前言去年出过一期在 OpenWRT 上部署 OpenConnect VPN 的详细教程,主要用于在外办公方便VPN 回家的使用场景.博主几乎每天使用持续了一年多,在 macOS 和 iOS 上体验都非...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。