进程之间的通信
-
同主机之间进程通信
ipc shm -
不同主机之间进程通信
socket
主机port作用
主机上,每一个port,标识一种进程,不同主机应用层之间的通信,应是进程与进程的通信。如HTTP通信,在客户端标识端口,就是标识服务端的进程
openssl组成部分
- libcrypt 本地加密库
- libssl 通信加密
- openssl 命令行加密
加密算法
对称加密算法
对称加密: DES 3DES AES
特性: 加密和解密都使用同一秘钥,把数据块进行分块,对每个块进行加密
缺陷: 生成秘钥过多,秘钥分发困难
对于服务器来说1000个连接,需生成1000个秘钥。如果秘钥相同,那么1000个连接只要侦听其传输内容,都会互相知道。
秘钥分发,是基于秘钥分发算法进行的如DH,公钥分发。需要消耗比较高的cpu资源
公钥加密
公钥:从私钥中提取,可以公开给所有人
私钥:通过工具创建,使用者自己留存,必须保证私密性
特点:用公钥加密数据,只能使用与之配对的私钥进行解密
用途:
- 数字签名:主要让接收者确认发送发的身份
- 秘钥交换:发送方用对方公钥加密一对私钥并发给对方
- 数据加密
举例说明以上用途
image.png
bob和Alice进行通信
1 .Alice把要发送的数据的提取码(MD5,sh1)用私钥加密的方式发给bob
2 .Alice使之数据加密,用加密的对称算法加密数据。因为公钥加密数据是非常耗费资源的
3 .alice用bob的公钥加密堆成加密的密钥
4 .bob收到alice的数据,首先用alice的公钥进行解密,已确认alice的身份
5 . 确认完身份,用自己的私钥,解密数据加密的密钥
6 . 用解密出来的密钥,解密数据
7 . 使用数据算法(md5,sh1),对数据提取码。与之解密出来的数据提取码进行比较。用来保证数据的完整型。前面的加密用来保证数据的保密性
以上步骤的问题
![](https://img.haomeiwen.com/i18572346/ec1cdf75890fde94.png)
由于bob和alice的第一次通信时,无法确认对方的身份。此时eve分别伪装bob的公钥和alice通信,伪装alice的公钥和bob进行通信,从而窃取bob和alice之间通信的内容
问题点:bob需要确认公钥是alice的,alice需要确认公钥是bob的
image.png
CA证书机构
bob向CA注册,CA签署bob公钥,Alice得到bob的公钥,向CA确认是否是bob的公钥。
假设:eve有一个假 CA,伪装bob信息向alice发送公钥?
解决:CA给bob的公钥信息,用自己的私钥加密。alice得到CA的公钥解开,即可确认这是bob所认可的CA机构。得到bob的公钥信息
问题:alice如何得到CA的公钥?
CA证书通过可靠的途径,把公钥给了windows,即每一个系统都自带了CA的公钥
linux系统需要自己获取CA公钥。
-
算法
RSA(既能签名,也能加密),DAS(只能签名)
单向加密
即提取数据指纹,只能加密不能解密
特性:定长输出,雪崩效应
雪崩效应:初始数据的微小改变,导致加密效果的具大改变
算法: md5 ,sh1
秘钥交换
- 公钥加密:需要在互联网传输秘钥
- DH:不需要在互联网传输秘钥
alice:p ,g
bob: p ,g
1 .alice 传输 bob(p,g) bob传输(p,g)
2 .alice:有个x => p^x%g 传输给bob
3 .bob:有个y => p^y%g 传输给alice
4 .alice 对 (py%g)x
5 .bob对(px%g)y
第四步和第五步的结果一样,结果即是秘钥
PKI(公钥基础设施)
签证机构:CA 公钥向其提出申请注册
注册机构:RA 对公钥进行签名
证书吊销列表:CRL 当私钥丢了之后,向CA申请吊销。
证书存取机构: 所有公钥签名的证书存放地方
一般证书签名都是x509格式
x509定义了证书的结构,及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者唯一标识
主体的唯一标识
扩展
发行者的签名
https通信的过程
简单过程
![](https://img.haomeiwen.com/i18572346/99b75f9deda640c7.png)
当第四步证书有问题时,会在浏览器端提示此证书有问题
ssl 通信过程详解
第一阶段 client hellow
- 支持的协议版本 比如tls2.0
- 客户端生成一个随机数,稍后用户生成的“会话秘钥”
- 支持的加密算法 比如 AES ,3DES,RSA
- 支持的压缩算法
第二阶段 serverHellow
- 确认使用的加密通信协议版本,比如 tls1.2
- 服务器生成的一个随机数,稍后用于生成会话秘钥
- 确认加密使用的加密方法
- 服务器证书
第三阶段
- 验证服务器证书,在确认无误后取出其公钥;(发证机构,证书完整性,证书持有者,证书有效期,吊销列表)
- 发送以下信息给服务器端
1 .一个随机数
2 .编码变更通知,表示随后的信息都将用双方商定的加密方法和秘钥发送
3 .客户端握手结束通知
第四阶段
- 收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话的所有到的会话秘钥
- 向客户端发送如下消息
1 .一个随机数
2 .编码变更通知,表示随后的信息都将用双方商定的加密方法和秘钥发送
3 .服务端握手结束通知
ssl和tls
ssl: Netspace公司1994年研发出来的 v1.0 v2.0 v3.0 安全的套接字(v3.0有漏洞)
tls:IEIF组织 1999年研发出来的 纯属层安全 v1.0 v1.1 v1.2
tls是仿ssl研发的,因ssl是商业公司研发的,所以IEIF组织,为了其一家独大,研发出来的tls
协议的开源实现
openssl
ssl会话分为三步
1 .客户端型服务端索要并验证证书
2 .双方协商生成会话秘钥
3 .双方采用秘钥进行加密通信
openssl
从多子命令分为三类
- 标准命令
enc ca reg genrsa
对称加密:
工具: openssl,enc,gpg
支持的算法: 3des,aes,blowfish,twofish
enc命令:
加密:openssl enc -e -des3 -a -salt -in hosts -out hosts.clipertext
解密: openssl enc -d -des3 -a -salt -out fstab -in hosts.clipertext
-e 指定加密算法
-a 指定输出格式
-salt 加密随机数
-in 要加密的文件
-out 加密完成的文件
单向加密
openssl dgst,md5sum,sha224sum
[root@ceshi ~]# openssl dgst -md5 hosts
MD5(hosts)= 54fb6627dbaa37721048e4549db3224d
生成用户密码
工具: passwd,openssl passwd
openssl passwd -1 -salt 1234567
生成随机数:
工具: openssl rand
openssl rand -base64 10
-base64 指64编码格式
10表示一共生成10个随机数
-hex 表示生成16进制的编码0-F
公钥加密
加密解密,数字签名,秘钥交换
加密解密
算法: RSA,ELG
工具: openssl rsautl.pgp
数字签名
算法:RSA,DSA
秘钥交换
算法:DH
生成秘钥: openssl genrsa 1024 > mykey.private
openssl genrsa 1024 -out mykey.private
(umask 077;openssl genrsa -out /tmp/mykey3.private)
提取公钥: openssl rsa -in mykey.private -pubout
- 消息摘要命令(dgst子命令)
- 加密命令(enc子命令)
linux系统随机数生成器
/dev/random: 仅从熵池返回随机数,随机数用尽阻塞
/dev/urandom: 仅从熵池返回随机数,随机数用尽,会利用软件生成随机数,非阻塞伪随机数不安全
熵池随机数来源
硬盘IO的中断时间
键盘IO的中端时间
程序每次用,都把随机数剪贴走,如果剪贴的比生成的快,random的随机数就会阻塞程序
CA
公共信任的CA,私有CA
openssl:/etc/pki/tls/opessl.conf
openCA
构建私有CA
在确定配置为CA的服务上,生成一个自签证书,并为CA提供所需的目录及文件即可
1 .生成私钥文件
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2 .生成自签证书
req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-news:生成新证书的签署请求
-x509:生成自签格式的证书,专用于创建私有CA
-key:生成请求时,用到的私有文件路径
-out:生成私有文件证书,如果是自签操作,将直接生成证书
-days:证书的有效期
3 .为CA提供所需的目录及文件
[root@ceshi CA]# mkdir -p /etc/pki/CA/{certs.crl,newcerts}
[root@ceshi CA]# touch /etc/pki/CA/{serial,index.txt}
[root@ceshi CA]# echo 01 > /etc/pki/CA/serial
需要用到证书进行安全通信的服务器,需要向CA请求签署证书
步骤
1 .用到证书的主机生成私钥
(umask 077;openssl genrsa -out httpd.key)
2 .生成签署请求
openssl req -new -key httpd.key -out httpd.csr -days 365
.csr 请求签署文件
3 .将请求通过可靠的方式发送给CA主机
4 .在CA上签署证书
openssl ca -in httpd.csr -out /etc/pki/CA/certs/http.crt -days 365
5 .查看证书信息
[root@ceshi ~]# openssl x509 -in /etc/pki/CA/certs/http.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=BEIJING/O=CZAZM/OU=Ops/CN=www.czazm.com
查看serial和subject的信息
网友评论