证书是证明一个机构身份的“身份证”,由权威、值得信任的组织担任第三方来发放证书,这种组织称为CA,例如GlobalSign等;
企业向CA申请证书,CA审核通过才会颁发证书,有了受信任的证书我们在访问企业网站才不会报出告警信息;
证书机制是pki体系的一个组成部分使用到了非对称加密的技术。
接下来的实验分四个部分配置根CA、子CA和客户端
准备阶段:
1
|
<span style=
"font-size:16px;"
>
/etc/pki/tls/openssl
.cnf
//
此目录存放CA创建的规则<br><
/span
>
|
此文件有一些配置我们需要注意,具体如下图
图一
图二
默认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