证书是证明一个机构身份的“身份证”,由权威、值得信任的组织担任第三方来发放证书,这种组织称为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、指定第一个证书吊销列表的编号
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