博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openssl的学习
阅读量:4041 次
发布时间:2019-05-24

本文共 3551 字,大约阅读时间需要 11 分钟。

此为学习马哥视频记录,向马哥致敬!!

加密算法和协议:
  对称加密:数据加密(保密性),(3DS,AES)
  公钥加密:身份认证、密钥交换、数据加密(不常用,比对称加密要慢3个数量级),(RSA,DSA)
  单向加密:数据完整性(MD5,SHA1-------,)
  密钥交换:RSA,DH,ECDH,ECDHE
  
SSL/TLS s
SSL:安全套接字层(ssl1.0,ssl2.0,ssl3.0)
TLS:传输层安全(tls.0,tls1.1,tls1.2,tls1.3)

OpenSSL

libcrypto
libssl
openssl

SSL Handshake Protocol会话主要三步:

客户端向服务器端索要并验正证书;
双方协商生成“会话密钥”;
双方采用“会话密钥”进行加密通信;

第一阶段:ClientHello:		支持的协议版本,比如tls1.2;		客户端生成一个随机数,稍后用户生成“会话密钥”		支持的加密算法,比如AES\RSA;		支持的压缩算法;	第二阶段:ServerHello		确认使用的加密能信协议版本,比如:tls1.2;		服务器端生成一个随机数,稍后用生成“会话密钥”		确认使用的加密方法;		服务器证书;	第三阶段:	 验正服务器证书,在确认无误后取出其公钥;(发证机构,证书完整性,证书持有者,证书有效期,吊销列表)	 发送以下信息给服务器端:	 	一个随机数;	 	编码变更通知;	 	客户端握手结束通知;	第四阶段:		收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所用到的“会话密钥”;		向客户端发送如下信息:			编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;			服务端握手结束通知;

PKI:公钥基础设施

签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库

X.509v3:定义了证书的结构以及认证协议标准

版本号
序列号
签名算法ID
发行者名称
有效期限
主体公钥
发行者的唯一标识
主体的唯一标识
扩展
发行者的签名

OpenSSL的应用

组件:
libcrypto,libssl 主要由开发者使用
openssl:多用途命令管理工具

openssl:	众多子命令:分为三类:		标准命令		消息摘要命令(dgst子命令)		加密命令(enc子命令)				标准命令:enc ,ca ,req ,genrsa,------		对称加密:			工具:openssl enc ,gpg			支持的算法:3des,aes,blowfish,towfish						enc命令:				加密:#openssl enc -e -des3 -a  -salt -in fstab -out fstab.ciphertext				解密:#openssl enc -d -des3 -a -salt -out fstab. -in fstab.ciphertext				单向加密:			工具:openssl dgst, mdsum ,sha1sum, sha224sum,....			dgst命令:				#openssl dgst -md5 /PATH/TO/SOMEFILE		生成用户密码:			#openssl passwd -1 -salt 12345678 ;-1为md5加密		生成随机数:			工具:openssl rand 			#openssl rand -base64 NUM			#openssl rand -base64 10			#openssl rand -hex 10 ;二进制编码					#openssl passwd -1 -salt $(openssl rand -hex 4 )		公钥加密:			加密解密:				算法:RSA,ELGamal				工具:openssl rsault,gpg			数字签名:				算法:RSA,DSA,ELGamal			密钥交称:				算法:DH		生成密钥:			生成私钥:#(umask 077 ; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)			提出公钥:#openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout	linux系统上的随机数生成器:		/dev/random:仅从熵池中返回随机数;随机数用尽,阻塞;		/dev/urandom:从熵池中返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;		熵池中的随机数来源:			硬盘IO中断时间间隔;			键盘IO中断时间间隔;			所以了但随机数用尽,可以适当的复制文件以生成随机数放入熵池中

CA:

公共信任的CA,私有CA
建立自己的CA;
openssl
OpenCA
openssl命令:
配置文件: /etc/pki/tls/openssl.cnf

构建私有 CA:	  在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可;	  步骤:	   (1)生成私钥;	   	#(umask 077 ; openssl  genrsa -out /etc/pki/CA/private/cakey.pem 4096)	   (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

要用到证书进行安全通信的服务器,需要向CA请求签署证书:

步骤:(以http为例)
(1)用到证书的主机生成私钥;
#mkdir /etc/httpd/ssl
#cd /etc/httpd/ssl
#(umask 077; openssl genrsa -out httpd.key 2048)
(2)生成证书签署请求;
#openssl req -new key /etc/httpd/ssl/httpd.key out httpd.csr -days 365
(3)将请求通过可靠方式发送给CA主机;
#scp httpd.csr root@server:/tmp/
(4)在CA主机上签署证书;
 #openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
  查看证书中的信息:
  #openssl x509 -in /etc/pki/CA/certs/httpd.crt -nout -serial -subject
吊销证书:
步骤:(在CA上执行):
(1)客户端获取要吊销的证书的serial(在使用证书的主机执行):
#opensssl x509 -in /etc/pki/CA/certs/httpd.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/crl/number
 (4)更新证书吊销列表
  #openssl ca -gencrl -out thisca.crl
  查看crl文件:
  #openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

在这里插入代码片

转载地址:http://onodi.baihongyu.com/

你可能感兴趣的文章
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[leetCode By Python] 14. Longest Common Prefix
查看>>
[LeetCode By Python]118. Pascal's Triangle
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
[LeetCode By MYSQL] Combine Two Tables
查看>>
Android下调用收发短信邮件等(转载)
查看>>
Android中电池信息(Battery information)的取得
查看>>
SVN客户端命令详解
查看>>
Android/Linux 内存监视
查看>>
Linux系统信息查看
查看>>
用find命令查找最近修改过的文件
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
android raw读取超过1M文件的方法
查看>>