加密解密技术基础,PKI以及创建私有CA
- 加密算法和协议:
1.对称加密:加密和解密使用同一个密钥
DES:Data Encryption Standard; 3DES:Triple DES; AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits) Blowfish Twofish IDEA RC6 CAST5 特性: (1)加密、解密使用同一个密钥; (2)将原始数据分割成为固定大小的块,逐个进行加密; 缺陷: (1)密钥过多; (2)密钥分发困难;
2.公钥加密:密钥分为公钥与私钥
公钥:从私钥中提取产生;可公开给所有人;pubkey
私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;
特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
用途:
数字签名:主要在于让接收方确认发送方的身份;
密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
数据加密
算法:RSA, DSA, ELGamal
DSS: Digital Signature Standard
DSA:Digital Signature Algorithm
3.单向加密:即提出数据指纹;只能加密,不能解密;
```
特性:定长输出、雪崩效应;
功能:完整性;
算法:
md5:Message Digest 5, 128bits
sha1:Secure Hash Algorithm 1, 160bits
sha224, sha256, sha384, sha512
4.密钥交换: IKE(Internet Key Exchange) ``` 公钥加密 DH(Deffie-Hellman) 例如: A:p, g B:p, g A: x--> p^x%g ==> B A: (p^y%g)^x=p^yx%g B: y--> p^y%g ==> A B: (p^x%g)^y=p^xy%g
5.一次加密通信过程:
![](https://s1.51cto.com/images/blog/201908/03/f9ce9c59418030e8d74408c57da0db0e.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
A: (1):128bit的特征码单向加密成数字摘要
(2):将数字摘要和原文前面加上A的私钥
(3):将A的私钥和特征码用对称加密
(4)对称加密前面加上B的公钥
B:(1):B用自己的私钥解密获得对称空间
(2):用对称密钥解密加密内容
(3):用A的公钥单向加密生成特征码
(4):用此特征码和原来的比较是否一样
* PKI以及SSL会话
1. PKI:公钥基础设施
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库
X.509:定义了证书的结构以及认证协议标准
版本号;序列号;签名算法ID;发行者名称;有效期限;主体名称;主体公钥;发行者的惟一标识;主体的惟一标识;扩展;发行者的签名
2.SSL会话主要三步:
客户端向服务器端索要并验正证书;
双方协商生成“会话密钥”;
双方采用“会话密钥”进行加密通信;
![](https://s1.51cto.com/images/blog/201908/03/b97798dbf412302a664e7ea293e8fa89.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
SSL Handshake Protocol:
第一阶段:ClientHello:
支持的协议版本,比如tls 1.2;
客户端生成一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES、3DES、RSA;
支持的压缩算法;
第二阶段:ServerHello
确认使用的加密通信协议版本,比如tls 1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法;
服务器证书;
第三阶段:
验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
发送以下信息给服务器端:
一个随机数;
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
客户端握手结束通知;
第四阶段:
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
向客户端发送如下信息:
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
服务端握手结束通知;
* 创建私有CA
1.构建私有CA:
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可
步骤: (1)生成私钥: (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) ():作用域子shell进程 (2) 生成自签证书; openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 -new:生成新证书签署请求; -x509:生成自签格式证书,专用于创建私有CA时; -key:生成请求时用到的私有文件路径; -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书; -days:证书的有效时长,单位是day; (3)为CA提供所需的目录及文件; mkdir -pv /etc/pki/CA/{certs,crl,newcerts} touch /etc/pki/CA/{serial,index.txt} echo 01 > /etc/pki/CA/serial
2.要用到证书进行安全通信的服务器,需要向CA请求签署证书
步骤:(以nginx为例)
(1) 用到证书的主机生成私钥;
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(2) 生成证书签署请求
openssl req -new -key /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.csr -days 365
(3) 将请求通过可靠方式发送给CA主机;
scp /etc/nginx/ssl/nginx.csr root@172.20.10.12:/tmp/
(4) 在CA主机上签署证书;
openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365
(5)查看证书中的信息:
openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
[root@localhost /]# openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -
serial -subject
serial=01
subject=/C=CN/ST=Shanghai/O=cern/OU=devops/CN=devops.com
(6)从CA主机上将crt证书给服务器:
scp /etc/pki/CA/certs/nginx.crt root@172.20.10.9:/etc/nginx/ssl/
3.服务器端配置ssl并验证
服务端配置ssl: /etc/nginx/nginx.conf
![](https://s1.51cto.com/images/blog/201908/04/1b71846b26ec89c9069d593720b567f6.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
web验证ssl:
![](https://s1.51cto.com/images/blog/201908/04/0c0e35fb7be194d8574c9344af643511.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
4.吊销证书:
步骤:
(1) 客户端获取要吊销的证书的serial(在使用证书的主机执行): openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -serial -subject (2) CA主机吊销证书: 先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致; 吊销: openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem 其中的SERIAL要换成证书真正的序列号; (3) 生成吊销证书的吊销编号(第一次吊销证书时执行) echo 01 > /etc/pki/CA/crlnumber (4) 更新证书吊销列表 openssl ca -gencrl -out thisca.crl