创建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工作原理,整个过程如下:

linux学习之路之使用openssl创建私钥CA及使用CA为客户端颁发证书_第1张图片

 

 

由于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 /etc/pki/CA/private/cakey.pem  NUMBITS)

                使用(),该命令将会在子shell中执行,且执行完毕后退出子shell,由于密钥文件需要保

                密,因此这里将创建的私钥文件的权限指定为600;

                -out cakey.pem就是私钥的文件。这里的文件要与/etc/pki/tls/openssl.cnf中的私钥文件要相同

                 NUMBITS就是密钥的长度

                

                从私钥中提取公钥(公钥是从私钥提取出来的)

                 openssl genrsa  -in /etc/pki/CA/private/cakey.pem  -pubout

                   

        2、生成自签证书

                openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem   -out /etc/pki/CA/cacert.pem 

-days 365

                    使用openssl   x509  -text  -in  /etc/pki/CA/cacert.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  1024

             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 签署该请求,生成证书,在传给客户端