本文借助实验环境下建立的root CA私钥和证书进一步建立中间CA。为了便于区分,咱们将建立中间CA(intermediate CA)的CA称为根CA(root CA)。html
中间CA是root CA的代理,其证书由root CA签发,同时中间CA可以表明根CA签发用户证书,由此创建起信任链。vim
建立中间CA的好处是即便中间CA的私钥泄露,形成的影响也是可控的,咱们只须要使用root CA撤销对应中间CA的证书便可。此外root CA的私钥能够脱机妥善保存,只须要在撤销和更新中间CA证书时才会使用。加密
咱们基于已经建立的root CA建立本身的中间CA,与前文保持一致,假定证书根目录为/etc/pki/CA/目录,将中间CA的证书相关信息存放在本身的目录中,为了体现信任链的传递逻辑,在/etc/pki/CA/下建立对应目录便可,这里假设中间CA的证书目录是/etc/pki/CA/intermediate/。spa
初始化证书目录的过程与建立root CA时并没有二致:代理
# mkdir /etc/pki/CA/intermediate # cd /etc/pki/CA/intermediate # mkdir certs crl newcerts private # chmod 700 private # touch index.txt # echo 1000 > serial
接下来建立中间CA的私钥,采用AES-256算法加密中间CA的私钥,中途会让咱们输入加密密钥,最后修改中间CA的私钥访问权限:code
# cd /etc/pki/CA # openssl genrsa -aes256 -out \ intermediate/private/intermediate.key.pem 4096
Enter pass phrase for intermediate.key.pem: SECRET
Verifying - Enter pass phrase for intermediate.key.pem: SECRET
# chmod 400 intermediate/private/intermediate.key.pem
中间CA要向root CA申请公钥证书,就要首先产生一个CSR(证书签名请求,Certificate Signing Request都有做用)格式的请求文件,将其发送给root CA后等待其对中间CA的审查。htm
将建立root CA时使用的配置文件拷贝到中间CA证书目录下,该配置文件在生成CSR文件和后续签发用户证书时都有用。blog
建立并编辑intermediate_CA.cnf:ssl
# cp /etc/pki/CA/root_CA.cnf \
/etc/pki/CA/intermediate/intermediate_CA.cnf
# cd /etc/pki/CA/intermediate
# vim intermediate_CA.cnf
...
[ CA_default ]
dir = /etc/pki/CA/intermediate
certs = $dir/certs
private = $dir/private
certificate = $certs/intermediate.cert.pem
private_key = $private/intermediate.key.pem
从此咱们每次使用中间CA建立新的证书时,以”-config /etc/pki/CA/intermediate/intermediate_CA.cnf“ 的形式告诉OpenSSL中间CA的信息。
intermediate_CA.cnf默认申请的有效期是365天,若是想要修改这个时长,能够在[ CA_default ]的"default_days"字段进行修改。
接下来就能够生成CSR文件了:
# cd /etc/pki/CA/intermediate # openssl req -config intermediate_CA.cnf \ -sha256 -new -key private/intermediate.key.pem \ -out certs/intermediate.csr.pem
随后系统会要求咱们输入中间CA的私钥密码,设置中间CA的一些身份信息等等,注意”Organization Name“一项必定要与root CA时设置的相同。
正确输入中间CA的身份信息后咱们就获得了中间CA的CSR。
接下来咱们用root CA赞成中间CA的请求,由于咱们将使用root CA的私钥签名中间CA的证书,这时系统会要求咱们输入root CA的私钥密码,选择签名证书以下:
# cd /etc/pki/CA # openssl ca \ -config root_CA.cnf \-extensions v3_ca -notext -md sha256 \ -in intermediate/certs/intermediate.csr.pem \ -out intermediate/certs/intermediate.cert.pem
Using configuration from root_CA.cnf
Enter pass phrase for /etc/pki/CA/private/ca.key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
...
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
# chmod 444 intermediate/certs/intermediate.cert.pem
到此咱们已经为中间CA生成了公钥证书,下面咱们能够验证一下该证书的真实性:
# openssl verify -CAfile /etc/pki/CA/certs/ca.cert.pem \ /etc/pki/CA/intermediate/certs/intermediate.cert.pem
/etc/pki/CA/intermediate/certs/intermediate.cert.pem: OK
系统显示"OK",说明咱们颁发给中间CA的证书是有效的。
至此咱们能够采起相似中间CA得到证书的方式为普通客户颁发证书了,只不过这时咱们以中间CA的身份进行。因为中间CA的证书也是通过上一级CA认证的,因此之后验证用户证书时必须将完整的CA证书链提供给OpenSSL。
因此咱们的工做尚未完成,接下来就构造这样的CA证书链,事实上很是简单,将root CA的证书追加到中间CA证书后便可。生产环境下各级CA的证书都是公开的,所以将其依次追加在一块儿生成一个文件,就是咱们所说的”CA证书链“了。
# cd /etc/pki/CA # cat intermediate/certs/intermediate.cert.pem \ certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem # chmod 444 intermediate/certs/ca-chain.cert.pem
从此想要验证由咱们的中间CA颁发的证书,好比:www.example.com.cert.pem,这样便可:
# openssl verify -CAfile /etc/pki/CA/intermediate/certs/ca-chain.cert.pem \ /etc/pki/CA/intermediate/certs/www.example.com.cert.pem /etc/pki/CA/intermediate/certs/www.example.com.cert.pem: OK
至此,咱们已经成功建立了中间CA,赶忙用它去签发用户证书吧,虽然只是实验环境,别忘了进行必要的审核哦!