创建CA、申请证书、吊销证书-阿里云开发者社区

开发者社区> 安全> 正文

创建CA、申请证书、吊销证书

简介:

证书是证明一个机构身份的“身份证”,由权威、值得信任的组织担任第三方来发放证书,这种组织称为CA,例如GlobalSign等;

企业向CA申请证书,CA审核通过才会颁发证书,有了受信任的证书我们在访问企业网站才不会报出告警信息;

证书机制是pki体系的一个组成部分使用到了非对称加密的技术。

接下来的实验分四个部分配置根CA、子CA和客户端


准备阶段:

1
<span style="font-size:16px;">/etc/pki/tls/openssl.cnf  //此目录存放CA创建的规则<br></span>

此文件有一些配置我们需要注意,具体如下图

wKioL1m06TPTRxblAALNw8wKXCw350.png 

图一


wKiom1m06gOCm2wVAAI1MkmqpDU109.png

图二

默认CA目录

1
2
3
4
/etc/pki/CA/   //所有资料全存放在此目录下
/etc/pki/CA/certs/   //存放CA证书
/etc/pki/CA/crl/   //存放证书吊销列表
/etc/pki/CA/index.txt  //存放可用、不可用证书的数据库

新CA目录

1
2
3
4
5
6
/etc/pki/CA/newcerts   //存放CA的新目录
/etc/pki/CA/cacert.pem  //生成的自签名证书
/etc/pki/CA/serial  //下个证书的编号,16进制,多从00或01开始
/etc/pki/CA/crlnum  //下一个吊销证书的编号
/etc/pki/CA/crl.pem  //下一个吊销列表
/etc/pki/CA/private/cakey.pem  //密钥

匹配策略

1
2
3
match  //必须匹配,默认是国家、州(省)、组织名称
supplied  //必填,为哪个主机申请证书,一般对应域名
optional  //可选

后续操作,会对这些规则再作说明

实验环境:A、B、C三台机器,A是根CA,B是子CA,C是客户

第一部分:在A机器上创建根CA,本实验CA都是私有的

1、生成基本文件

1
2
3
touch /etc/pki/CA/index.txt  //生成数据库文件,记录有效、无效的证书信息
echo 00 > /etc/pki/CA/serial  
//生成存放证书编号的文件,00是期望的下一个证书编号

2、根CA自签证书

2.1 生成私钥

1
2
3
4
5
cd /etc/pki/CA
(umask 066;openssl genrsa -out private/cakey.pem 1024 )
//umask只在子进程有效,目的是保证私钥的安全
//生成的私钥文件必须是cakey.pem这是固定格式
//1024是私钥的长度,也可以取2048或者4096

2.2 根据私钥生成自签名证书

1
2
3
4
5
6
7
8
openssl  req -new -x509  -key private/cakey.pem  -days 3650 -out cacert.pem  //有效期10年
 req:请求的意思,man req可以查到更多帮助
-new: 生成新证书签署请求
-x509: 专用于CA生成自签证书
-key: 生成请求时用到的私钥文件
-days :证书的有效期限天数
-out : 证书的保存路径,cacert.pem是固定的
//cacert.pem就是根CA自己的证书,因为已经是最顶端,因此根CA只能自己证明自己的身份

第二部分:在B机器上创建子CA

根CA自证身份,没有上级。但是子CA则是由上级根CA证明身份;

在生成证书和请求文件时需要填写基本信息,填写的内容以及必填和选填的内容在图二已经说明。可以参考“准备阶段”的“配置策略”;

客户端申请证书其填写的基本信息必须与CA存放的信息一一匹配,否则CA无法为其生成证书,会报错的

1、生成基本文件,含义与第一部分步骤1相同

1
2
touch /etc/pki/CA/index.txt  
echo 00 > /etc/pki/CA/serial

2、向根CA申请证书

2.1 在子CA生成密钥

1
2
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 1024)

2.2 生成证书申请文件

1
2
3
openssl req -new -key private/subca.key -out subca.csr
//还可以用-days指定申请期限,但是意义不大
注意:默认国家,省,公司名称三项必须和根CA一致

2.3 将subca.csr发给根CA

2.4 根CA检查无误后,签发证书,并把证书传给子CA

1
2
3
4
5
6
7
openssl  ca -in subca.csr  -out certs/cacert.pem -days 365  //有效期1年
//建议将证书放在certs这个目录下,方便管理
openssl  x509 -in cacert.pem   -noout -text|issuer|subject|serial|dates
//查看证书中的信息,text是全部信息,其他参数分别对应部分信息
openssl  ca -status 00  //查看生成的第一个证书的状态
注意:
本处cacert.pem也可以改成别的名字,但是根CA把证书传给子CA时,必须命名为cacert.pem


第三部分:客户机C机器申请证书

1、生成客户端私钥

1
2
cd /etc/pki/tls
(umask 066; openssl genrsa -out private/clientca.key 1024)

此处的目录与CA的目录不一样,需要注意

2、生成证书申请文件,并传给子CA

1
openssl  req -new -key private/clientca.key  -out clientca.csr

3、子CA审核通过,颁发证书

1
2
openssl  ca -in client.csr  -out certs/client.crt -days 100  
//客户端的证书格式不要求是pem后缀

4、将证书发给客户端

注意:

配置的时候一定要细心,一个字母错误都会导致实验失败。比如把cacert.pem误写成casert.pem就会报出如下错误信息

1
2
3
4
5
Using configuration from /etc/pki/tls/openssl.cnf
Error opening CA certificate /etc/pki/CA/cacert.pem
140572789077832:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/cacert.pem','r')
140572789077832:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
unable to load certificate

就因为一个小小的字母错误导致实验进行不下去,多可怕

第四部分:吊销证书

1、在客户端获取要吊销的证书的serial

1
openssl  x509 -in client.crt  -noout -serial -subject

2、在CA上,根据客户提交的serial、subject检查index.txt,无误后,吊销证书

1
openssl  ca -revoke newcerts/00.pem  //00是证书的编号

3、指定第一个证书吊销列表的编号

1
echo 01 > crlnumber

4、更新证书吊销列表

1
2
openssl  ca -gencrl -out crl/crl.pem
openssl  crl -in crl/crl.pem  -noout -text  //查看证书吊销列表

以上生成的证书、吊销证书都可以传到windows上打开(修改后缀),可以更加直观的看到证书的信息

结束



本文转自  a_pan  51CTO博客,原文链接:http://blog.51cto.com/panpangao/1964122

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

云安全开发者的大本营

其他文章