利用CA私钥和证书创建中间CA

  本文借助实验环境下创建的root CA私钥和证书进一步创建中间CA。为了便于区分,我们将创建中间CA(intermediate CA)的CA称为根CA(root CA)。

  

  关于如何使用OpenSSL创建root CA

  

  中间CA是root CA的代理,其证书由root CA签发,同时中间CA能够代表根CA签发用户证书,由此建立起信任链。

  创建中间CA的好处是即使中间CA的私钥泄露,造成的影响也是可控的,我们只需要使用root CA撤销对应中间CA的证书即可。此外root CA的私钥可以脱机妥善保存,只需要在撤销和更新中间CA证书时才会使用。

  我们基于已经创建的root CA创建自己的中间CA,与前文保持一致,假定证书根目录为/etc/pki/CA/目录,将中间CA的证书相关信息存放在自己的目录中,为了体现信任链的传递逻辑,在/etc/pki/CA/下创建对应目录即可,这里假设中间CA的证书目录是/etc/pki/CA/intermediate/。

  初始化证书目录的过程与创建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的私钥访问权限:

# 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的审查。

  将创建root CA时使用的配置文件拷贝到中间CA证书目录下,该配置文件在生成CSR文件和后续签发用户证书时都有用。

  创建并编辑intermediate_CA.cnf:

# 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,赶紧用它去签发用户证书吧,虽然只是实验环境,别忘了进行必要的审核哦!
posted @ 2014-11-06 18:16  王智愚  阅读(8198)  评论(0编辑  收藏  举报