加密解密技术基础,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