首页 > 代码库 > linux学习之路之创建私钥CA及使用CA为客户端颁发证书
linux学习之路之创建私钥CA及使用CA为客户端颁发证书
创建CA(Certificate Authority)
CA的储存格式主要有2种:x509和pkcs12
x509是目前最主流的CA储存格式,在x509格式的证书中,储存的内容主要有:
证书的公钥和使用期限
证书的合法拥有着
证书该如何被使用
CA的信息
CA签名的校验码
默认情况下,TCP/IP模型和OSI模型,并没有实现数据的加密,而要实现数据的加密需要使用TLS/SSL协议,TLS和SSL在有些Linux版本上实现的机制是相同的,因此在这里我们之介绍SSL协议
SSL(Secure Socket Layer)协议其实就是一个库文件,这里面含有各种加密算法,因此当应用层的数据交给传输层时,如果要实现数据加密,就会去调用这个SSL库文件,这样就实现了数据的加密功能。
SSL也是有版本的,有SSLv1,SSLv2,SSLv3,现在主流的是SSLv2和SSLv3。SSLv1现在基本已经没人使用了,因为它加密的数据不***全。
这里以http为例,讲述SSL工作原理,整个过程如下:
由于SSL是一种协议,想要实现它,我么可以使用openssl命令,openssl是SSL的开源实现,openssl主要包含了2个库文件:
libcrpto:这是一个通用加密库文件,里面含有各种加密算法。我们的数据就是通过这里面的算法来
实现数据加密的。
libssl:这个库文件是TLS/SSL的实现,它是基于会话、实现了身份认证、数据机密性和会话完整性
的TLS/SSL库
因此openssl这个命令非常的强大
接下介绍关于openssl的使用,以及如何使用openssl创建CA的。
openssl是一个多用途命令行工具,包含了各种加密算法,还可以创建私钥CA,不过常见的私钥CA只能在公司内部使用。
openssl ?:可以显示openssl的标准命令和各种加密协议
openssl speed [加密算法] :测试openssl对各种加密算法的速度
openssl rand -base64 NUMBITS:用来生成指定位数的随机密码
openssl passwd -1 {PASSWD} :给某个用户的账号密码加密
openssl dgst -sha1 FILENAME:给某个文件生成校验码
sha1 FILENAME:也可以生成某个文件的校验码
openssl version:查看当前使用的openssl版本号
openssl还可以对某个文件进行加密
openssl enc -des3 -salt -a -e -in inputfile -o outputfile
-e:表示加密
-d:表示解密
-in:要加密的文件
-out:加密后的文件
使用openssl创建私钥CA
创建私有CA的步骤主要有2步:
1、生成一对密钥
创建私钥:
(umask 077;openssl genrsa -out /PATH/TO/cakey.pem NUMBITS)
使用(),该命令将会在子shell中执行,且执行完毕后退出子shell,由于密钥文件需要保
密,因此这里将创建的私钥文件的权限指定为600;
-out cakey.pem就是私钥的文件。这里的文件要与/etc/pki/tls/openssl.cnf中的私钥文件要相同
NUMBITS就是密钥的长度
从私钥中提取公钥(公钥是从私钥提取出来的)
openssl genrsa -in /PATH/TO/cakey.pem -pubout
公钥是用来生成证书用的,而私钥是对数据进行加密的
2、生成自签证书
openssl req -new -x509 -key /PATH/TO/keyfile.pem -out /PATH/TO/certifcate.crt -day 365
使用openssl x509 -text -in /PATH/TO/certifcate.crt 可以查看这个证书的内容
通过这两步就可以手动创建一个CA了。 不过这样创建的CA还不能颁发证书,要想给客户颁发证书还需要相应的文件,这些文件我们可以根据私有CA的配置文件/etc/pki/tls/openssl.conf来手动创建。
私有CA的配置文件/etc/pki/tls/openssl.conf,内容有:
这里之介绍我们需要的内容
[ CA_default ]
dir =/etc/pki/CA #定义默认CA目录
certs = $dir/certs #客户端证书路径
crl_dir = $dir/crl #证书吊销列表的路径
database = $dir/index.txt #保存已发出去的证书,由于检索
new_certs_dir = $dir/newcerts # 保存刚生成的证书
certificate = $dir/cacert.pem # CA自己的证书
serial = $dir/serial # 证书的序列号,默认是从01开始
crlnumber = $dir/crlnumber #证书吊销列表的工作号
crl = $dir/crl.pem # 证书吊销列表的文件
#证书吊销列表保存着曾经发出的证书,但是并未过期,而是由于某些原因不能使用了(安全机制)
private_key = $dir/private/cakey.pem # 私钥文件
因此我们需要在/etc/pki/CA/目录下创建私钥文件,CA证书、cert、crl、newcerts目录,创建serial和index.txt文件
为客户端颁发证书
首先客户端要为某个程序或者服务生成证书,最好在相应程序的目录下创建证书,例如以http为例,在/etc/httpd/ssl目录下创建如下文件即可:
1、需要在客户端本地创建私钥
openssl genrsa -out keyfile 10244
2、生成颁发证书请求文件并传给CA
openssl req -new -key keyfile -out KEYFILE.csr(请求文件后缀一定要是.csr)
3、CA签署请求文件
openssl ca -in KEYFILE.csr -out CERTIFICATE.crt -days 365(有效期限为3365天)
4、签署完成后就生产一个证书 ,并将证书传给客户端。
此时/etc/pki/CA/index.txt和/etc/pki/CA/serial文件同时发生改变。
说明:由于整个过程是在同一台电脑上完成的,因此客户端生成的颁发证书请求就不需要传给CA了,CA签署的证书也不用传给客户端了。因为CA和客户端使用同一台主机。
总结:整个创建证书的步骤
1、创建私钥CA
创建一对密钥
生成自签证书
2、客户端需要:
创建一对密钥
生成颁发证书请求(请求文件后缀为.csr)
将请求发给CA
3、CA 签署该请求,生成证书,在传给客户端
本文出自 “linux学习之路” 博客,谢绝转载!