首先,我们要知道,在互联网上,数据的安全性尤为重要,所以对于数据的加密与解密的重要性就不言而喻了。下面我就来说说加密解密算法与用openssl创建CA数字证书签署的相关知识。


加密,解密算法我们可以分为3种:

单向加密(是为了测试数据完整性的一种算法,抽取数据的数据指纹,也就是特征码)

    单向加密有2个特征

        1,定长输出   以固定长度输出的

        2,具有雪崩效应  极小的数据改变也会引发特征码的巨大的改变,例如下图

    linux中加密,解密与用openssl创建CA知识的总结

    图中,我创建一个文件t1,计算出他的特征码,

    然后我给文件t1添加一个字符h,然后再计算出特征码,你会发现2次的特征码完全不一样。


对称加密:(用于加密任意大小数据块大小的数据,加密解密双方使用同一对秘钥)

    常用的对称加密有:3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等,

        对称加密的特征:加密解密使用同一口令,把明文分隔成固定大小块进行加密的

                        缺陷: 每与一个用户通信,就要使用一种口令,使秘钥过于太多

                                    秘钥在传输的过程中安全性

                

非对称加密:(加密和解密双方使用不同的秘钥)

    分为公钥与私钥    其中,公钥是从私钥中提取出来的,它是私钥的一部分(私钥位数非常长,一般1024位,2048位)并且,公钥是公开的,大家都能看到,私钥是自己留存的 。

    

    公钥加密算法

    RSA:既能加密也能签名(随后我会介绍)的一种算法

    DSA: 数据加密算法,只能用于签名用的,


下面我们来说说,现在互联网上常用的加密数据的过程:例如host1 与host2通信

    linux中加密,解密与用openssl创建CA知识的总结

  加密过程:

第一步:host1用单向加密算法计算出数据data的特征码(数据指纹)放在数据后面,

第二步:host1用自己的私钥加密 数据特征码,并放数据的后面

第三步:host1生成一对秘钥,采用对称加密对加密过的特征码和数据进行加密

第四步:host1用host2的公钥再对整个数据加密,放在数据的后面

第五步: 把经过多重加密的数据发送给host2


  解密过程:

第一步: host2 接收到host1 发来的数据,就用自己的私钥去解密,成功解密,就证明这个数据的确是发给自己的没错,

第二步:host2 用host1生成的密码解密数据,得到加密的特征码与加密的数据

第三步; host2 还要用host1的公钥解密,来验证是否是host1发出的这个数据的,用来验证数据的来源是否是与自己通信的用户

第四步:host2 用host1单向加密的算法来解密加密的数据的特征码           

第五步:比较得出的特征码是否一致,一致则说明数据时完整的,没被修改过。


加密解密的过程我们说完了,那么就来说说,双方通信室基于什么基础呢?为什么host1就相信host2的公钥就是host2的,有什么判断依据呢?有,那就是CA(相当于***颁发机构的,用来证明身份的合法性的)


CA 又称CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

CA的功能:签发数字证书、管理下级审核***构、接受下级审核***构的业务申请、维护和管理所有证书目录服务、向**管理中心申请**、实体鉴别**器的管理,等等。

下面来介绍CA的工作机制,

    双方要想达到互信通信怎么办呢?

        那就双方各需要一个数字证书,证明自己的身份

    那么这个数字证书怎么来的呢?

        数字证书有CA签署的(CA用自己的私钥加密数字证书,用CA的公钥验证是否是CA签署的)

    为什么是CA签署呢?

        因为CA是如今互联网公认的唯一的数字证书签署机构

   首先,要想得到证书我们要先申请,再经CA签署认证后,你就拥有在互联网上通信的合法性了。

CA很重要,那么我们来说说怎么用openssl创建CA的吧

openssl创建私有CA的一般过程:

   1)CA需要用为自身生成一对秘钥

    先看下openssl生成了那些文件

    linux中加密,解密与用openssl创建CA知识的总结

    我们可以看到:/etc/pki/CA 这个CA的主目录,下属的目录private:用来存放CA自身的私钥的

    生成私钥钥的命令,并保存至/etc/pki/CA/private

    linux中加密,解密与用openssl创建CA知识的总结

红线的部分为,保存私钥的目录及文件名,且文件名为cakey.pem(这是配置文件要求的默认文件名)

且生成的文件权限要为600,或者400.linux中加密,解密与用openssl创建CA知识的总结


   2)CA要为自己签署一个证书(目的:让客户端拿此证书来验证CA颁发给其他客户端签署的证书是否合法)

    证书中保存的是公钥信息,自签署证书的过程会从私钥中提取所需的公钥

    自签署证书的命令如下图

    7linux中加密,解密与用openssl创建CA知识的总结其中:一些划红线的命令参数给你们解释下:

    -new 表示新的请求

    -x509 表示生成自签署证书

    -key  表示后跟的文件路径为私钥的文件路径(从私钥提取公钥)

    -out  表示存放自签署证书的位置

    -days 表示该证书的有效期天数,(就像***上的有效期一样)

看吧生成了自签署证书(此证书要给每个通信的客户端都发一份,来验证CA签署的其他证书的合法性)

    linux中加密,解密与用openssl创建CA知识的总结



    CA服务器的环境初始化:

    CA要想正常工作还需要2个文件一个是索引文件,另一个是***文件(用来统计用的)

    linux中加密,解密与用openssl创建CA知识的总结

   3)每一个通信的客户端需要做的事情:

        1,要生成一对秘钥

        我们以http服务申请证书的过程为例:

            我们要在HTTP服务的配置文件所在的目录创建一个目录来保存证书和私钥文件

            linux中加密,解密与用openssl创建CA知识的总结

        创建目录ssl,并且在ssl目录下创建秘钥,

        linux中加密,解密与用openssl创建CA知识的总结    


        然后再生成签署请求,并保存在ssl目录下(可以任意目录存放,用完就可以丢弃了)

     2,生成证书请求(要想得到证书不申请,CA怎么给你签署呢)

        linux中加密,解密与用openssl创建CA知识的总结

    

    3 把生成的证书请求发送给CA,请求CA签署

            问题是怎么发送呢

            scp /etc/httpd/ssl/httpd.csr CA服务器(IP地址)

            如果是在同一公司内部的话,你可以使用ssh基于FTP服务发送请求,在这里我是在同一主机上做的实验,所以不用发送啦,在下一个博客里我会介绍ssh的相关知识

            

 4)CA先验证申请者的信息,再签署证书,签署完成后返回给客户端。

    CA签署证书的命令如下:

    linux中加密,解密与用openssl创建CA知识的总结

        

在/etc/httpd/ssl/下linux中加密,解密与用openssl创建CA知识的总结


自此创建CA服务的流程基本如上图的过程啦。