zoukankan      html  css  js  c++  java
  • 利用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,赶紧用它去签发用户证书吧,虽然只是实验环境,别忘了进行必要的审核哦!
  • 相关阅读:
    js字符串使用占位符拼接
    C#解析json字符串总是多出双引号的原因分析及解决办法
    JS 正则验证字符串中是否含有数字
    不错的MVC文章
    Js 更换html同一父元素下子元素的位置
    团队任务个人博客--20160426
    《构建之法》阅读笔记3
    团队任务个人博客20160425
    团队任务个人博客20160424
    软件工程进度条-第八周
  • 原文地址:https://www.cnblogs.com/Security-Darren/p/4079605.html
Copyright © 2011-2022 走看看