首先,我们要知道,在互联网上,数据的安全性尤为重要,所以对于数据的加密与解密的重要性就不言而喻了。下面我就来说说加密解密算法与用openssl创建CA数字证书签署的相关知识。
加密,解密算法我们可以分为3种:
单向加密(是为了测试数据完整性的一种算法,抽取数据的数据指纹,也就是特征码)
单向加密有2个特征
1,定长输出 以固定长度输出的
2,具有雪崩效应 极小的数据改变也会引发特征码的巨大的改变,例如下图
图中,我创建一个文件t1,计算出他的特征码,
然后我给文件t1添加一个字符h,然后再计算出特征码,你会发现2次的特征码完全不一样。
对称加密:(用于加密任意大小数据块大小的数据,加密解密双方使用同一对秘钥)
常用的对称加密有:3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等,
对称加密的特征:加密解密使用同一口令,把明文分隔成固定大小块进行加密的
缺陷: 每与一个用户通信,就要使用一种口令,使秘钥过于太多
秘钥在传输的过程中安全性
非对称加密:(加密和解密双方使用不同的秘钥)
分为公钥与私钥 其中,公钥是从私钥中提取出来的,它是私钥的一部分(私钥位数非常长,一般1024位,2048位)并且,公钥是公开的,大家都能看到,私钥是自己留存的 。
公钥加密算法
RSA:既能加密也能签名(随后我会介绍)的一种算法
DSA: 数据加密算法,只能用于签名用的,
下面我们来说说,现在互联网上常用的加密数据的过程:例如host1 与host2通信
加密过程:
第一步: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生成了那些文件
我们可以看到:/etc/pki/CA 这个CA的主目录,下属的目录private:用来存放CA自身的私钥的
生成私钥钥的命令,并保存至/etc/pki/CA/private
红线的部分为,保存私钥的目录及文件名,且文件名为cakey.pem(这是配置文件要求的默认文件名)
且生成的文件权限要为600,或者400.
2)CA要为自己签署一个证书(目的:让客户端拿此证书来验证CA颁发给其他客户端签署的证书是否合法)
证书中保存的是公钥信息,自签署证书的过程会从私钥中提取所需的公钥
自签署证书的命令如下图
7其中:一些划红线的命令参数给你们解释下:
-new 表示新的请求
-x509 表示生成自签署证书
-key 表示后跟的文件路径为私钥的文件路径(从私钥提取公钥)
-out 表示存放自签署证书的位置
-days 表示该证书的有效期天数,(就像***上的有效期一样)
看吧生成了自签署证书(此证书要给每个通信的客户端都发一份,来验证CA签署的其他证书的合法性)
CA服务器的环境初始化:
CA要想正常工作还需要2个文件一个是索引文件,另一个是序列号文件(用来统计用的)
3)每一个通信的客户端需要做的事情:
1,要生成一对秘钥
我们以http服务申请证书的过程为例:
我们要在HTTP服务的配置文件所在的目录创建一个目录来保存证书和私钥文件
创建目录ssl,并且在ssl目录下创建秘钥,
然后再生成签署请求,并保存在ssl目录下(可以任意目录存放,用完就可以丢弃了)
2,生成证书请求(要想得到证书不申请,CA怎么给你签署呢)
3 把生成的证书请求发送给CA,请求CA签署
问题是怎么发送呢
scp /etc/httpd/ssl/httpd.csr CA服务器(IP地址)
如果是在同一公司内部的话,你可以使用ssh基于FTP服务发送请求,在这里我是在同一主机上做的实验,所以不用发送啦,在下一个博客里我会介绍ssh的相关知识
4)CA先验证申请者的信息,再签署证书,签署完成后返回给客户端。
CA签署证书的命令如下:
在/etc/httpd/ssl/下
自此创建CA服务的流程基本如上图的过程啦。