OpenWrt OpenVPN 设置证书自动更新脚本

按照 OpenWRT OpenVPN配置远程访问所有家里局域网服务 | Jacks Blog 配置后,OpenVPN 可以正常使用,但一个月后客户端报错了,证书过期了。

VERIFY ERROR: depth=1, error=certificate has expired:

查了一下,发现是设置了三十天过期,真不知道当时怎么想的。

default_crl_days= 30

简单想了一下,可以把这个参数改大,重新生成证书配置客户端 ovpn 文件;或者保持参数不变,每三十天重新生成证书并配置客户端的 ovpn 文件。想想每次都要搞一遍,还是把它脚本化吧。废话不多说,上脚本。

自动更新证书脚本

#! /bin/sh

PKI_DIR="/etc/openvpn/ssl"
PKI_CNF=${PKI_DIR}/openssl.cnf

rm -f ${PKI_DIR}/newcerts/*
> ${PKI_DIR}/index.txt
echo "01" > ${PKI_DIR}/serial

openssl req -batch -nodes -new -keyout "ca.key" -out "ca.crt" -x509 -config ${PKI_CNF}  ## x509 (self-signed) for the CA
openssl req -batch -nodes -new -keyout "my-server.key" -out "my-server.csr" -subj "/CN=my-server" -config ${PKI_CNF}
openssl ca  -batch -keyfile "ca.key" -cert "ca.crt" -in "my-server.csr" -out "my-server.crt" -config ${PKI_CNF} -extensions my-server

openssl req -batch -nodes -new -keyout "my-client.key" -out "my-client.csr" -subj "/CN=my-client" -config ${PKI_CNF}
openssl ca  -batch -keyfile "ca.key" -cert "ca.crt" -in "my-client.csr" -out "my-client.crt" -config ${PKI_CNF} -extensions my-client

chmod 0600 "ca.key"
chmod 0600 "my-server.key"
chmod 0600 "my-client.key"

openssl dhparam -out dh2048.pem 2048

cp ca.crt my-server.* dh2048.pem /etc/openvpn

service openvpn restart

把该脚本设置为每三十天自动执行一次即可,另外,因为证书变了,那客户端的 ovpn 文件也要随之变化。

自动生成 ovpn 配置文件的脚本

#! /bin/sh

CLIENT_PREFIX="./prefix"
CLIENT_OVPN="./client.ovpn"

> $CLIENT_OVPN # empty file

cat $CLIENT_PREFIX >> $CLIENT_OVPN

echo "<ca>"   >> $CLIENT_OVPN
cat ca.crt    >> $CLIENT_OVPN
echo "</ca>"  >> $CLIENT_OVPN

echo "<cert>"     >> $CLIENT_OVPN
cat my-client.crt >> $CLIENT_OVPN
echo "</cert>"    >> $CLIENT_OVPN

echo "<key>"      >> $CLIENT_OVPN
cat my-client.key >> $CLIENT_OVPN
echo "</key>"     >> $CLIENT_OVPN

注意,prefix 文件是 ovpn 文件里除了证书之外的其他配置项,比如路由、协议方式、地址端口等。

参考链接

利用openssl命令搭建私有CA管理证书 – 作业部落 Cmd Markdown 编辑阅读器

分类:OpenWrt

Tagged as:

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理