#目录结构对比easyrsa2.x目录#easy-rsa2.xkeys├── 01.pem #可能是证书制作过程中的中间产物,3.x版本看不到├── 02.pem├── 03.pem├── 04.pe
#目录结构对比
easyrsa2.x目录
#easy-rsa2.xkeys├── 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.shkeys="etc/openvpn/easy-rsa/keys"rsapath="/etc/openvpn/pki" #指定新证书目录#复制keys到pkicp -r $keys $rsapath#创建目录mkdir ${rsapath}/{cert_by_serial,issued,private,reqs}#找到数字开头的pem,移动到cert_by_serialfind $rsapath -maxdepth 1 -regex ".*./[0-9]+.pem"| xargs -I {} mv {} $rsapath/cert_by_serial/#移动证书和秘钥mv $rsapath/*.key $rsapath/privatemv $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/keyspki = /etc/openvpn/pki #复制文件到pkishutil.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))
#下一步找个机会跑起来验证下