openssl是实现ssl协议的应用程序,可以使用yum install -y openssll来安装,构建私有CA之前先来了解openssl的使用;
openssl的主配置文件:/etc/pki/tls/openssl.cnf
[CA_default]
dir:CA的主目录
certs:已颁发证书的存储位置
crl_dir:已吊销证书的存储位置
database:证书索引文件
new_certs_dir:新颁发证书的存储位置
certificate:CA证书文件
serial:证书颁发时的当前序列号
crlnumber:吊销证书的当前序列号
crl:当前使用的CRL
private_key:CA私钥
RANDFILE:私有随机数生成器文件
私有CA作为单位或组织内部多台主机验证身份使用,不在互联网上起作用,是基于ssl协议利用openssl搭建的,openssl私有CA使用的x.509的证书,构建私有CA分为CA服务器操作和客户机操作。
1、构建私有CA
a、私有CA服务器生成私钥
[[email protected] CA]# (umask 077; openssl genrsa
-out private/cakey.pem 2048) 命令解释
括号():在当前shell的zishell中执行
umask
077:设定默认umask,这样生成的证书权限就是600,除了root用户其他用户均没有操作权限;
genrsa:生成私钥命令
-out:输出文件,后面是私钥输出的路径名字
2048:加密位数
b、生成自签署证书
req子命令:生成PKCS#10格式的证书签署请求
-new:生成新的证书签署请求;
-key /path/to/private_key_file:私钥文件路径;
-daysn:证书有效时长;
-out /path/to/request_file: 生成的证书请求文件路径;
x509:专用于CA生成自签署证书时;
-newkey rsa:NUM 无需事先专门生成私钥文件,而是生成请求时直接生成私成私钥,并提取公钥用于证书;也就是说上面a步骤可以不执行,而直接使用此命令直接生成私钥并签署;
在给服务器签署证书的时候需要和此处的位置和公司内容保持一致,因为这是一个私有CA,是属于这个公司,只能签署这个公司内部的服务器;
[[email protected] CA]# touch ./{index.txt,serial}
[[email protected] CA]# echo 01 > serial
生成索引文件和序号,这里需要手动添加序号01,以后再签署证书时就不用了;
2、给节点服务器发放证书
私有CA服务器上面已经构建好了,开始为内部服务器发放证书
此处是以http服务器为例,证书位置为/etc/httpd/conf/certs/
a、http服务器生成私钥
和上面CA服务生成私钥的方法一样;
b、生成私钥之后,要想让CA签署需要生成证书签署请求;
密码可以留空,这样证书签署请求就已经生成,需要私有CA服务器签署;
c、把请求文件发送给CA
scp httpd.csr CA服务器IP:路径(例如:172.16.100.1:/tmp)
d、私有CA服务器签署证书:此处是在CA服务器上进行
签署时会显示证书的详细信息,会有两次确认是否签署,直接y就可以签署;这样这书就 已经签署好了;
此时查看CA服务器索引文件会发现已经多了一条,正是签署的那台服务器的证书
e、将签署好的证书发送给服务器
scp /tmp/httpd.src http服务器IP:路径(例如:172.16.100.2:/etc/httpd/conf/certs)
此时证书已经签署好了,如果客户端想通过https访问,则需要去CA服务器下载CA服务器的 正式, 具体的认证过程:客户端通过https访问时,服务器会将自己的证书发送给客户端,客户端 根据下载的CA证书中的公钥解密服务器的证书的数字签名,如果和证书中描述的信息符合,则证 明来源正确,再通过单向加密算法,提取http服务器的证书文件的特征码,对比CA证书中的记录, 如果符合则说明证书没有被篡改,再次验证http服务器主体信息与服务器地址是否相同,相同则会 将信任http服务器。
[[email protected] certs]# openssl x509 -in httpd.crt -noout -subject
查看证书主体信息
[[email protected] certs]# openssl x509 -in httpd.crt -noout -serial
查看证书序列号
[[email protected] certs]# openssl x509 -in httpd.crt -noout -text
查看证书文本信息
3、证书吊销
服务器不使用了,证书需要吊销,以免出现安全问题;
a、获取要吊销证书的序列号serial,利用上面的命令可以查看
b、CA服务器操作
1、根据证书持有者提交的serial和subject信息来与index.txt数据库文件中的信息是否一致;
2、吊销证书
3、生成吊销证书的编号(如果是第一次吊销)
[[email protected] CA]# echo 01 > /etc/pki/CA/crlnumber
4、更新证书吊销列表
[[email protected] CA]# cd crl
[[email protected] crl]# openssl ca -gencrl -out thisca.crl
此时我们再来查看index.txt文件
之前的V已经变成R了,说明序列号为01的证书已经时吊销状态了
4、私有CA的构建以及给服务器签署、吊销证书过程就是这样子,有什么不对的地方诚心希望指出。