,本文将介绍通过部署自签 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
导入证书