OpenConnect VPN 自签证书规划
目录规划
?> 本文是针对 OpenConnect VPN 的证书签发,吊销,取消吊销和管理进行规划整理,方便后期查阅和复用.
证书主目录
主目录路径: /etc/ocserv/ssl
主要包含:
- CA 根证书模版
ca.tmp
- CA 根证书私钥
ca.key.pem
- CA 根证书
ca.cert.pem
- Diffie-Hellman 密钥
dh.pem
用户证书目录
用户证书目录路径: /etc/ocserv/ssl/user
主要包含:
- 用户证书模版
stille.tmp
- 用户证书私钥
stille.key.pem
- 用户证书
stille.cert.pem
- 用户
AnyConnect.p12
证书sitlle.AnyConnect.p12
吊销证书目录
吊销证书目录: /etc/ocserv/ssl/revoked
主要包含:
- 吊销模版
crl.tmpl
- 吊销文件
revoked.pem
- 吊销列表文件
crl.pem
自签证书
创建目录
shell
mkdir -p /etc/ocserv/ssl
mkdir -p /etc/ocserv/ssl/user
mkdir -p /etc/ocserv/ssl/revoked
自签 CA 根证书
创建 CA 根证书模版
shell
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 根证书私钥
shell
openssl genrsa -out /etc/ocserv/ssl/ca.key.pem 2048
根据 CA 根证书私钥和 CA 根证书模版生成 CA 根证书
shell
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 密钥
shell
certtool --generate-dh-params --outfile /etc/ocserv/ssl/dh.pem
自签用户证书
创建用户证书模版
shell
cat >/etc/ocserv/ssl/user/stille.tmp<<EOF
cn = "stille"
unit = "IOIOX"
expiration_days = 3650
signing_key
tls_www_client
EOF
生成用户证书私钥
shell
openssl genrsa -out /etc/ocserv/ssl/user/stille.key.pem 2048
根据用户证书私钥, CA 根证书, CA 根证书私钥,用户证书模版生成用户证书.
shell
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
证书链补全
shell
cat /etc/ocserv/ssl/ca.cert.pem >>/etc/ocserv/ssl/user/stille.cert.pem
生成 .p12 证书文件
shell
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
吊销证书
创建吊销模版
shell
cat <<EOF >/etc/ocserv/ssl/revoked/crl.tmpl
crl_next_update = 365
crl_number = 1
EOF
创建空的吊销文件
shell
touch /etc/ocserv/ssl/revoked/revoked.pem
根据 CA 根证书私钥, CA 根证书,吊销模版生成空的吊销列表文件.
shell
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
将需要吊销的用户证书写入吊销文件
shell
cat /etc/ocserv/ssl/user/stille.cert.pem >> /etc/ocserv/ssl/revoked/revoked.pem
根据 CA 根证书私钥, CA 根证书,吊销文件,吊销模版写入吊销列表文件.
shell
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
取消吊销
当前仅一个已吊销证书,将其恢复使用.
shell
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
当前有多个已吊销证书,恢复使用其中一个.
shell
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
编辑模版
证书及账号密码登陆参数
!> 注释即禁用,至少启用一项
.如同时启用则需双重验证
,其用户名必须和证书中用户名保持一致.
shell
auth = "certificate"
# 证书登陆
auth = "|AUTH|"
# 账号密码登陆
证书与账号密码共存
!> 同时启用,并将auth = "|AUTH|"
修改为enable-auth = "|AUTH|"
.
shell
auth = "certificate"
# 证书登陆
enable-auth = "|AUTH|"
# 账号密码登陆
服务器域名证书
!> 上传域名证书并修改证书路径
shell
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
# 上传证书文件并修改证书路径,例如:
server-cert = /etc/uhttpd.crt
server-key = /etc/uhttpd.key
CA 根证书路径
?> 使用证书登陆时,取消注释并修改证书路径.
shell
#ca-cert = /etc/ocserv/ca.pem
取消注释启用,修改 CA 根证书路径.
ca-cert = /etc/ocserv/ssl/ca.cert.pem
证书登陆用户信息
?> 取消注释启用并修改后,后台可查询证书登陆的用户信息
shell
#cert-user-oid = 0.9.2342.19200300.100.1.1
# 取消注释启用并修改值
cert-user-oid = 2.5.4.3
吊销列表文件
!> 当生成吊销列表文件时,需启用并修改路径.如没有吊销列表文件,需保持注释禁用.否则会导致服务无法启动.
shell
#crl = /etc/ocserv/crl.pem
# 取消注释启用,修改 crl.pem 路径.
crl = /etc/ocserv/ssl/revoked/crl.pem
防火墙
!> OpenWrt 防火墙需添加以下记录
iptables -t nat -I POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
iptables -I FORWARD -i vpns+ -s 192.168.100.0/24 -j ACCEPT
iptables -I INPUT -i vpns+ -s 192.168.100.0/24 -j ACCEPT