本文借助实验环境下创建的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 private
  # touch index.txt
  # echo > 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  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 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,赶紧用它去签发用户证书吧,虽然只是实验环境,别忘了进行必要的审核哦!

利用CA私钥和证书创建中间CA的更多相关文章

  1. 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】

    自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信   如果你的规划需要创建多个证书,那么使用私有 ...

  2. OpenSSL - 利用OpenSSL自签证书和CA颁发证书

    秘钥操作 这个命令会生成一个1024/2048位的密钥,包含私钥和公钥. openssl genrsa -out private.key 1024/2038                     ( ...

  3. https学习笔记三----OpenSSL生成root CA及签发证书

    在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...

  4. OpenSSL生成root CA及签发证书

    一.openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用.健壮.功能完备的工具套件,用以支持SSL/TLS 协议的实现.官网:https://www.openss ...

  5. 加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证

    加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证 各角色比喻 客户端:通常为请求方,要验证服务器的身份. 服务器:通常为响应方,有时也要 ...

  6. 实现CA证书创建及客户端申请证书

    author:JevonWei 版权声明:原创作品 CA证书的相关文件路径 openssl配置文件/etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf C ...

  7. 使用 OpenSSL 创建私有 CA:3 用户证书

    OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 在前文&l ...

  8. 使用 OpenSSL 创建私有 CA:2 中间证书

    OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 本文将在前 ...

  9. 使用 OpenSSL 创建私有 CA:1 根证书

    OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 OpenS ...

随机推荐

  1. Python 操作redis有序集合(sorted set)

    #coding:utf8 import redis r =redis.Redis(host=") 1.Zadd Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中.如果某个成员 ...

  2. 采用alluxio提升MR job和Spark job性能的注意点

    1. 介绍 2. 实验说明 2.1 实验环境 2.2 实验方法 2.3 实验负载 3. MapReduce on alluxio 3.1 读取10G文件(1G split) 3.2 读取20G文件(1 ...

  3. IIS7 MVC 403 禁止访问:访问被拒绝

  4. JAVA-JSP内置对象之session范围

    相关资料:<21天学通Java Web开发> session范围1.就是指客户浏览器与服务器一次会话范围内,如果和服务器断开连接,那么这个属性也就失效了.2.通过使用session的set ...

  5. PHP重载以及Laravel门面Facade

    目录 重载的概念 魔术方法中的重载 属性重载 方法重载 Laravel中的Facade 扩展 谈谈__invoke Laravel提供了许多易用的Facade,让我们用起来特步顺手,那么这些Facad ...

  6. 微服务之springCloud-docker-feign-hystrix(六)

    简介 上一节我们讨论feign的配置,这节我们讨论一下,feign+hystrix调用生产者时,进行容错处理 一.创建模块(microservice-consumer-movie-feign-with ...

  7. 《5天学会卡西欧fx-5800p之实操视频教程(初级)》目录和我的工作室现场曝光

    很多人给我讲,想让我录制一份卡西欧fx-5800p的视频教程,我也一直在准备,准备了半年,录制视频真的不是件容易的事,条件有限,而且工作也很忙,中途还会有想放弃的念头,真的是花费了我很多的心血,但不管 ...

  8. RabbitMQ安装 ubuntu12.04LTS

    RabbitMQ安装需要安装较多的依赖包,之前如果安装过RabbitMQ-server必须要先彻底删除. 重装的ubuntu系统(ubuntu server)的开发环境几乎是裸的,再重新编译安装erl ...

  9. C语言 · 企业奖金发放

    算法提高 企业奖金发放   时间限制:1.0s   内存限制:512.0MB      企业发放的奖金根据利润提成.利润低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10 ...

  10. zeroMQ消息传送的是一个固定长度的二进制数据,而TCP是通过字节流,那二进制流和字节流有啥区别?

    1.TCP是面向连接的,它在UDP数据包的基础上增加了重传.流控等一系列机制,封装成基于字节流的传输层通讯协议.使用字节流,应用有点像语音或视频聊天,粒度小到一个字节,双向同时传输,连绵不断. Zer ...