OpenSSL多级证书的实践

简介

证书颁发机构(CA)是签署数字证书的实体。网站需要让客户知道连接的安全的,他们需要向国际信任的CA支付签署其域名证书的费用。

创建根证书

CA处理加密的私钥和公共证书。一般CA不直接签署服务器或者客户端的证书。根CA仅用于创建一个或者多个中间CA,根CA信任中间CA,由中间CA代表其签署证书。这样保证跟密钥的脱机和未使用,因为根密钥的任何损害都是灾难性的。
创建根证书的步骤如下所示

  1. 准备目录

     mkdir /root/ca
     cd /root/ca
     mkdir certs crl newcerts private
     chmod 700 private
     touch index.txt
     echo 1000 > serial
    
  2. 准备配置文件 /root/ca/openssl.cnf

  3. 创建根key

     cd /root/ca
     ## 其中-aes256的方式进行加密,可以省略不添加密码
     openssl genrsa -aes256 -out private/ca.key.pem 4096
     chmod 400 private/ca.key.pem
    
  4. 创建根证书

     # 使用req的命令必须使用-config指定openssl.cnf,如果没有指定会使用默认路径
     # 根证书一般的有效期设置的比较长,根证书失效后所有其签署的证书都不能正常工作
     cd /root/ca
     openssl req -config openssl.cnf \
         -key private/ca.key.pem \
         -new -x509 -days 7300 -sha256 -extensions v3_ca \
         -out certs/ca.cert.pem
     chmod 444 certs/ca.cert.pem
    
  5. 核实根证书

     openssl x509 -noout -text -in certs/ca.cert.pem
     # Signature Algorithm 签名算法
     # dates证书的有效期
     # Public-Key的bit长度
     # Issuer证书的签署机构
     # Subject证书的持有机构
     # 根证书都是签署机构和证书持有者相同的,自签名的
    

创建中间证书

中间证书是根证书签署的证书,根证书信任中间证书,进而形成信任链。使用中间证书主要是为了安全,
尽量保证根证书是离线的,尽可能少的使用。如果中间证书不在安全,可以通过根证书进行撤销中间证书,重新签署一个新的中间证书。

  1. 准备目录,基本和根证书的相同

     mkdir /root/ca/intermediate
     cd /root/ca/intermediate
     mkdir certs crl csr newcerts private
     chmod 700 private
     touch index.txt
     echo 1000 > serial
     # crlnumber用来跟踪证书撤销
     echo 1000 > /root/ca/intermediate/crlnumber
    
  2. 拷贝配置文件到中间证书目录下/root/ca/intermediate/openssl.cnf

     # 和根证书的配置不同点如下所示
     [ CA_default ]
     dir             = /root/ca/intermediate
     private_key     = $dir/private/intermediate.key.pem
     certificate     = $dir/certs/intermediate.cert.pem
     crl             = $dir/crl/intermediate.crl.pem
     policy          = policy_loose
    
  3. 创建中间key

     cd /root/ca
     openssl genrsa -aes256 \
         -out intermediate/private/intermediate.key.pem 4096
     chmod 400 intermediate/private/intermediate.key.pem
    
  4. 创建中间证书签名请求

     cd /root/ca
     openssl req -config intermediate/openssl.cnf -new -sha256 \
         -key intermediate/private/intermediate.key.pem \
         -out intermediate/csr/intermediate.csr.pem
    
  5. 根证书给中间证书进行签名,该证书一般签发的有效期要比根证书的有效期要短,一般是10年

     cd /root/ca
     openssl ca -config openssl.cnf -extensions v3_intermediate_ca \
         -days 3650 -notext -md sha256 \
         -in intermediate/csr/intermediate.csr.pem \
         -out intermediate/certs/intermediate.cert.pem
     chmod 444 intermediate/certs/intermediate.cert.pem
     # index.txt是Openssl的CA命令存储签名的数据库,不允许手动删除或者修改。
    
  6. 核实中间证书

     openssl verify -CAfile certs/ca.cert.pem \
       intermediate/certs/intermediate.cert.pem
    
  7. 创建证书链文件

     cat intermediate/certs/intermediate.cert.pem \
         certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
     chmod 444 intermediate/certs/ca-chain.cert.pem
    

创建服务端和客户端的签名

通过中间证书来签署服务端和客户端的证书。

  1. 创建服务端的key

     cd /root/ca
     openssl genrsa -aes256 \
       -out intermediate/private/www.example.com.key.pem 2048
     chmod 400 intermediate/private/www.example.com.key.pem
    
  2. 创建签名请求

     cd /root/ca
     openssl req -config intermediate/openssl.cnf \
       -key intermediate/private/www.example.com.key.pem \
       -new -sha256 -out intermediate/csr/www.example.com.csr.pem
    
  3. 中间CA进行签名

     # cd /root/ca
     openssl ca -config intermediate/openssl.cnf \
           -extensions server_cert -days 375 -notext -md sha256 \
           -in intermediate/csr/www.example.com.csr.pem \
           -out intermediate/certs/www.example.com.cert.pem
     chmod 444 intermediate/certs/www.example.com.cert.pem
    
  4. 核实签名

     openssl x509 -noout -text \
       -in intermediate/certs/www.example.com.cert.pem
       
     # 使用之前的CA链检验证书是否合法
     openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \
       intermediate/certs/www.example.com.cert.pem
    

常见的命令

  1. 查看版本号详情

     openssl version -a
    
  2. 查看默认的配置路径

     openssl version -d
    
  3. 帮助命令,帮助本身是不合法的命令

     openssl help # openssl:Error: 'help' is an invalid command 命令会出错,但是依然能够看到有哪些命令,后面可以通过man s_client的形式来查看详情
    
  4. openssl通过client进行模拟tls连接

     openssl s_client -showcerts -connect localhost:8883 -CAfile ca-chain.pem
    
  5. 建立Tls的Service

     openssl s_server -accept 8443 -cert cert.pem -key key.pem -CAfile certs/ca-chain.cert.pem
    
  6. 同时查看多个证书详情的话

     openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
    

参考资料

certum CA根CA
CA相关介绍

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值