CA是什么?
在网络中两台主机通讯过程中,数据的加密解密依赖于对方的公钥,因此就需要一种可靠机制能够保证公钥数据的安全性,这种机制就是CA。CA是一个证书颁发机构,这个机构负责证书的颁发,谁需要就去CA购买,买完之后去验证证书就可以了。那我们如何知道或者确定一个证书就是正规的CA颁发的呢?证书是分等级的,就是说二级证书是由上一级证书验证,那么到了顶级了呢?这时候只能自己给自己验证,就是自签名。就是根证书需要自己给自己认证。
CA包含了什么?
CA是PKI(Public Key Infrastructure 公钥基础设施)的一个组成部分。
KPI包括:
签证机构:CA(Certificate Authority)相当于办理×××的公安局
注册机构:RA 相当于办理×××时去申请的派出所
证书吊销列表:CRL 相当于我们证件丢失时挂失的内容
证书存取库:当被人去请求认证时的资料库
数字证书的格式(X.509:定义了证书的结构以及认证协议标准)
版本号;
序列号:CA用于惟一标识此证书;
签名算法;
颁发者:即CA自己的名称;
有效期限:两个日期,起始日期和终止日期;
主体名称:证书拥有者自己的名字;
主体公钥:证书拥有者自己的公钥;
CRL分发点;
扩展信息;
发行者签名:CA对此证书的数字签名;
证书通常有两类用途:用户证书和主机证书。
数字证书的获取
获取证书的方法有两种:向RA注册申请,或者自己建立私有CA。向RA注册申请CA是需要花钱购买的,通常用于企业生产环境中,以满足业务的需求;但有时我们仅仅用于企业内部自身使用或者个人测试使用,因此我们就没必要去花钱购买CA证书,而OpenSSL工具可以满足我们创建私有CA的需求。
使用OpenSSL构建私有CA
首先看看配置文件openssl的配置文件:/etc/pki/tls/openssl.cnf,截取重要的一段如下:
[ ca ]default_ca =CA_default # The default casection <==默认CA名[ CA_default ] dir =/etc/pki/CA # Where everythingis kept <==CA的默认目录certs =$dir/certs # Where the issuedcerts are kept <==需要指定存放证书的目录,文件名也是手动指定的crl_dir =$dir/crl # Where the issuedcrl are kept <==证书吊销列表database =$dir/index.txt # database indexfile. <==证书数据库,默认没有。需要创建#unique_subject =no # Set to 'no' to allowcreation of # several ctificates with same subject.new_certs_dir =$dir/newcerts # default place fornew certs. <==生成新的证书默认存放路径 certificate =$dir/cacert.pem # The CA certificate <==CA自己的证书,上级CA颁发serial =$dir/serial # The current serial number <==下一个证书的证书编号,默认没有,创建必须写一个起始编号,必须16进制crlnumber =$dir/crlnumber # the current crl number <==下一个被吊销的证书编号 # mustbe commented out to leave a V1 CRLcrl =$dir/crl.pem # The current CRL <==证书吊销 private_key =$dir/private/cakey.pem# The private key <== CA的私钥
三种策略:匹配:指要求申请填写的信息跟CA设置信息必须一致
支持:指必须填写这项申请信息
可选:指可有可无
1、创建所需的文件
touch /etc/pki/CA/index.txt -------------------生成证书索引数据库文件echo 01 > /etc/pki/CA/serial------------------定第一个颁发证书的序列号
2、CA自签证书
生成私钥
cd /etc/pki/CA/
(umask066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
生成自签名证书
openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out etc/pki/CA/cacert.pem----------证书文件必须叫这个
-new: 生成新证书签署请求
-x509: 专用于CA生成自签证书
-key: 生成请求时用到的私钥文件
-days n:证书的有效期限
-out /PATH/TO/SOMECERTFILE: 证书的保存路径
注意:在后面集群环境下有可能会用到把私钥文件和生成的证书文件合在一起。
3、申请证书(颁发证书)
A 在需要使用证书的主机生成证书请求
给web服务器生成私钥
(umask066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
生成证书申请文件
openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr
B 将证书请求文件传输给CA
C CA签署证书,并将证书颁发给请求者
opensslca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 365
注意:默认国家,省,公司名称三项必须和CA一致
再回去看第一步我们创建的两个必须的文件,已经发生变化
同时也在newcerts下生成了一个新文件02.pem。和指定的test.crt 一样。
再把颁发晚的证书传给 客户端。
D 收到证书后进行查看
openssl x509 -in /etc/pki/CA/certs/test.crt -noout -text|issuer|subject|serial|date-------------------可以选择需要查看啥
4、吊销证书
opensslca -revoke /etc/pki/CA/newcerts/02.pem
吊销完得指定证书吊销列表,生产场景中需要把这个列表公布到网站上,通知网络中这次证书被吊销。
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem <==更新证书吊销列表
注意:第一次更新证书吊销列表前,才需要执行
echo 01 > /etc/pki/CA/crlnumber <==创建吊销列表编号