CA(签证机构)如何发挥作用? 1.通信双方互相交换证书; 2.双方验证证书的真伪; 3.双方协商加密算法; 4.用CA颁发的公钥解密证书的中CA的签名,能解密说明证书来源可靠; 5.用CA的加密算法加密证书,并取得特征值;与解密出来的特征值进行比较,如果相同,说明证书完整性有保证; 6.检查证书的有效期是否合法,如果在有效期内,则证书可用; 7.检查证书的主体名称和此次通信的目标是否能够对应; 8.检查证书是否被吊销;

能够实现上述安全加密功能的协议: SSL:Security Socket Layer,安全套接字层; TLS:Transport Layer Security,传输层安全协议;

SSL/TLS的handshake的四个阶段: 1.客户端向服务器索要证书并验证证书; 发送Client Hello的消息,此消息主要内容: 支持的协议的版本,如:SSL v3.0或TLS v1.2; 客户端生成一个随机数,稍后用于生成回话密钥; 支持的加密算法,如:DES,3DES,AES,RSA,.... 支持的压缩算法,如:gzip,bzip2,deflate,...

	2.双方协商生成会话密钥:
		发送Server Hello消息,此消息主要内容:
			确认使用的协议的版本,如:TLS v1.2
			服务器也生成一个随机数,稍后用于生成会话密钥;
			确认加密算法和压缩算法;
			服务器的证书;

	3.双方采用以及生成的会话密钥进行安全加密的数据通信:
		客户端验证服务器证书,在确认无误后,取出其中的服务器公钥;
			验证服务器证书的步骤:
				验证发证机构(CA);
				验证证书的完整性;
				验证证书的持有者信息;
				验证证书的有效期;
				验证CA的吊销列表中是否有此证书;
		客户端发送信息给服务器端;
		客户端再次生成一个随机数,用于公钥加密;
		编码格式的变更通知,表示以后的信息都将采用双方已经协商好的加密算法和压缩算法;
			客户端握手结束;

		服务器收到客户端发送来的第三个随机数(Pre_Master_key),计算生成此次会话用到的会话密钥,向客户端发送相关信息;
		编码格式的变更通知,表示以后的信息都将采用双方已经协商好的加密算法和压缩算法;
			服务器端握手结束;

	4.双方互相结束通信:
	
	
							
	SSL/TLS的handshake的四个阶段:
	1.Client Hello
	2.Server Hello
	3.通信双方采用已经生成的会话密钥进行安全加密的数据通信;
	4.双方结束通信;
	
	
	实现SSL/TLS协议的应用程序:OpenSSL
	
	OpenSSL:开源的实现SSL/TLS协议的事实的标准;
   主要有三部分组成:
	           1)libcrypto:实现加密和解密算法的库;
	           2)libssl:实现SSL协议/TLS协议功能的库;
	           3)openssl:多用途命令行工具;
	           
						 
						 
openssl命令行工具:
	众多的子命令实现各种安全加密功能;

	标准命令:
		enc, dgst, ca, req, genrsa, rand, rsa, x509, passwd, ...

	对称加密命令:enc
			提供对称加密算法,以进行数据或文件的手动加密;

			格式:openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] [-a/-base64] [-salt]
				-ciphername:加密算法的名称
				-in filename:openssl要读取的文件路径;
				-out filename:加密或解密操作后用于保存结果的文件路径;
				-e:加密操作
				-d:解密操作
				-a/-base64:用纯文本格式进行密文编码;
				-salt:随机加盐;

示例:# openssl enc -e -des3 -in ytc.txt -a -out ytc1.txt(加密) # cat ytc1.txt U2FsdGVkX1/PqNTpFQqp/nFppi3xdBEIIyaasE5rNwc=

				 # openssl enc -d -des3 -out ytc.txt -a -in ytc1.txt(解密)
				 
				 
单向解密命令:dgst
			示例:
				~]# openssl dgst -sha1 fstab

		生成随机数命令:rand
			openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

			示例:# openssl rand -base64 16
               JFPWNuu5WzXqfIk7luSBWA==



		生成带盐的密码:passwd
			openssl passwd -1 -salt SALT_STRING

			示例:
				~]# openssl passwd -1 -salt 01234567

		公钥加密算法:genrsa
			生成rsa加密算法的私钥;

			openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [-3] [numbits]

			出于安全考虑,需要给创建的私钥赋予只有拥有者才能读写其他任何人都不能读写的权限;建议使用下列方法生成私钥:
				~]# (umask 077 ; openssl genrsa -out /tmp/my.key 4096)
				~]# (umask 077 ; openssl genrsa > /tmp/my.key 4096)

		从以及生成的私钥文件中抽取公钥:rsa
			openssl rsa [-in filename] [-out filename] [-pubout]
				-pubout:抽取公钥
				-in filename:私钥文件的路径
				-out filename:公钥文件的路径

				示例:
					~]# openssl rsa -in my.key -out mykey.pub -pubout
 
				 
利用openssl建立私有CA步骤:
       1.创建CA的私钥文件:
		(umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

	2.生成自签证书:
		openssl req命令:
			openssl req [-out filename] [-new] [-key filename] [-x509] [-days n]

	3.完善目录及文本文件结构:
		touch /etc/pki/CA/index.txt
		echo 01 > /etc/pki/CA/serial

在CA上查看证书内容:
	openssl x509 -in /etc/pki/CA/cacert.pem -noout -serial -subject

吊销证书:必须在CA上执行;
	1.获取客户端证书对应的序列号:
		openssl x509 -in /etc/pki/CA/certificate -noout -serial

	2.吊销证书:
		openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

		注意:上述命令中的"SERIAL"要换成准备吊销的证书的序列号;

	3.生成吊销证书的吊销索引文件;仅需要第一次吊销证书时执行此操作:
		echo "SERIAL" > /etc/pki/CA/crl/crlnumber

	4.更新证书吊销列表:
		openssl ca -genctl -out /etc/pki/CA/crl/ca.crl

	5.查看CRL:
		openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text