Skip to content

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