#目录结构对比
easyrsa2.x目录
#easy-rsa2.x
keys
├── 01.pem #可能是证书制作过程中的中间产物,3.x版本看不到
├── 02.pem
├── 03.pem
├── 04.pem
├── ca.crt#根证书
├── ca.key#ca秘钥
├── client1.crt#客户端证书
├── client1.csr#客户端证书请求文件
├── client1.key#客户端秘钥
├── crl.pem#疑似证书吊销相关
├── dh2048.pem#dm密码
├── index.txt#证书列表
├── index.txt.attr
├── index.txt.attr.old
├── index.txt.old#证书列表备份
├── revoke-test.pem
├── serial#下一个证书的编号
├── serial.old
├── vpnserver.crt#服务器证书
├── vpnserver.csr
└── vpnserver.key
##easyrsa3.x的目录
3x对目录进行了调整,其中certs_by_serial
包含前面提到的pem. issued
存储已签发证书,private
存储私钥,reqs
存储证书请求列表。
pki/
├── ca.crt
├── certs_by_serial
│ ├── 1106A234004527B9A3B2DCC0F5C54B2E.pem
│ ├── 63F0273AD1E90D1105E213A70EA6B1F3.pem
│ └── 8C358150E2C79D3C2DCE36E46C53A9DC.pem
├── crl.pem
├── crl.pembak
├── dh.pem
├── index.txt
├── index.txt.attr
├── index.txt.attr.old
├── index.txt.old
├── issued
│ ├── client1.crt
│ ├── client2.crt
│ └── server.crt
├── private
│ ├── ca.key
│ ├── client1.key
│ ├── client2.key
│ ├── server.key
│ ├── server.key.4RJyLAmonH
│ └── server.key.oxtWZEYF6g
├── reqs
│ ├── client1.req
│ ├── client2.req
│ └── server.req
├── serial
└── serial.old
#迁移的可能性: 这里先做个假设,如果我们都是按照标准教材来操作证书签发的,按照两个版本的文档来看,easy-rsa2.x的证书存储在/etc/openvpn/easy-rsa/keys
。而easyrsa3.x则存储在/etc/openvpn/pki
。暂时假设是这样的.
迁移流程
- 创建目录
cert_by_serial,issued,private,reqs
- 数字起始的pem移动到
certs_by_serial
。 - .crt移动到
issued
。 - .keys移动到
private
目录。 - 证书请求文件**.csr更名为.req**后移动到
reqs
目录。
bash版
#migrate.sh
keys="etc/openvpn/easy-rsa/keys"
rsapath="/etc/openvpn/pki" #指定新证书目录
#复制keys到pki
cp -r $keys $rsapath
#创建目录
mkdir ${rsapath}/{cert_by_serial,issued,private,reqs}
#找到数字开头的pem,移动到cert_by_serial
find $rsapath -maxdepth 1 -regex ".*./[0-9]+.pem"| xargs -I {} mv {} $rsapath/cert_by_serial/
#移动证书和秘钥
mv $rsapath/*.key $rsapath/private
mv $rsapath/*.crt $rsapath/issued
#重命名并移动请求文件
ls $rsapath/*.csr|xargs -I {} basename {} .csr|xargs -I {} mv $rsapath/{}.csr $rsapath/reqs
这里有个小问题是,证书列表的格式似乎有点小区别,结构上整体应该是一致的,2.x中第四列证书序列号是01,02的序列,而3.x应该是md5计算的证书摘要信息。
看起来似乎很简单,不得不说bash是在是一个有点恶心的东西,如果是python的话,虽然可能会长很多,但是至少能看得懂
python版
import os,shutil,re
#按照自己的需要指定原始目录和目标目录
keys = /etc/openvpn/easyrsa/keys
pki = /etc/openvpn/pki
#复制文件到pki
shutil.copytree(keys,pki)
#创建目录
dirs = ["cert_by_seria","issued","private","reqs"]
for i in dirs:
os.mkdir(os.path.join(pki,i))
pem = re.compile("^\d+\.pem$")
for i in os.listdir(pki):
filename = os.path.join(pki,i)
#根据文件后缀类型移动到对应目录
if os.path.isfile(filename):
if pem.match(i):
shutil.move(filename,os.path.join(pki,"cert_by_seria",i))
if i.endswith("crt"):
shutil.move(filename,os.path.join(pki,"issued",i))
if i.endswith("key"):
shutil.move(filename,os.path.join(pki,"private",i))
if i.endswith("csr"):
newname=i[:-3]+"req"
shutil.move(filename,os.path.join(pki,'reqs',newname))
#下一步 找个机会跑起来验证下