利用CA私钥和证书创建中间CA
本文借助实验环境下创建的root CA私钥和证书进一步创建中间CA。为了便于区分,我们将创建中间CA(intermediate CA)的CA称为根CA(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的更多相关文章
- 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】
自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信 如果你的规划需要创建多个证书,那么使用私有 ...
- OpenSSL - 利用OpenSSL自签证书和CA颁发证书
秘钥操作 这个命令会生成一个1024/2048位的密钥,包含私钥和公钥. openssl genrsa -out private.key 1024/2038 ( ...
- https学习笔记三----OpenSSL生成root CA及签发证书
在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...
- OpenSSL生成root CA及签发证书
一.openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用.健壮.功能完备的工具套件,用以支持SSL/TLS 协议的实现.官网:https://www.openss ...
- 加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证
加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证 各角色比喻 客户端:通常为请求方,要验证服务器的身份. 服务器:通常为响应方,有时也要 ...
- 实现CA证书创建及客户端申请证书
author:JevonWei 版权声明:原创作品 CA证书的相关文件路径 openssl配置文件/etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf C ...
- 使用 OpenSSL 创建私有 CA:3 用户证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 在前文&l ...
- 使用 OpenSSL 创建私有 CA:2 中间证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 本文将在前 ...
- 使用 OpenSSL 创建私有 CA:1 根证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 OpenS ...
随机推荐
- String.format和MessageFormat.format的对比用法
1.MessageFormat.format import java.text.MessageFormat; /** * Created by SYJ on 2017/9/13. */ public ...
- MFC中获取命令行参数的几种方法
在MFC程序中,可以用以下几种方法来获取命令行参数. 为方便说明,我们假设执行了命令:C:\test\app.exe -1 -2 方法一 ::GetCommandLine(); 将获取到 " ...
- Lintcode: First Bad Version 解题报告
First Bad Version http://lintcode.com/en/problem/first-bad-version The code base version is an integ ...
- 3. Recursive AutoEncoder(递归自动编码器)
1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...
- 1. K近邻算法(KNN)
1. K近邻算法(KNN) 2. KNN和KdTree算法实现 1. 前言 K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用, ...
- docker简易命令
docker应用 安装 sudo yum install docker 启动 docker 进程 $ sudo service docker start Docker 默认开机启动 $ sudo ch ...
- struts学习笔记
------struts in action 读书笔记 1. ActionServlet:Struts 的ActionServlet控制导航流.当ActionServlet从容器接到一个请求,它使用U ...
- C语言 · 身份证排序
算法提高 身份证排序 时间限制:1.0s 内存限制:256.0MB 问题描述 安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号 ...
- json2
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- postgresql with递归
在PostgreSQL里,with子句提供了一种方法写一个大的查询中使用的辅助报表与查询.它有助于打破复杂和大型查询简单易读的形式. 1. 建表 postgres=# create table tb9 ...