通信安全-加解密体系
2021-09-15 18:35:32 0 举报
AI智能生成
描述了网络通信安全体系,CA认证体系,基于openssl的加解密实现、CA证书签署等
作者其他创作
大纲/内容
安全性概述
三个目标
保密性
完整性
可用性
攻击方式
威胁保密性的攻击方式:窃听、通信量分析
威胁完整性的攻击方式:更改、伪装、重放
威胁可用性的攻击方式:拒绝服务
解决方案
加解密:解决保密性和完整性
服务:认证机制、访问控制机制,解决可用性问题
加密算法
对称加密
特性:
1、加密、解密使用同一个密钥
2、将原始数据分割成为固定大小的块,逐个进行加密
1、加密、解密使用同一个密钥
2、将原始数据分割成为固定大小的块,逐个进行加密
缺陷:
1、密钥过多;
2、密钥分发困难
1、密钥过多;
2、密钥分发困难
算法:
DES: Data Encryption Standard,该加密方式已经寿终正寝了
3DES:Triple DES ;
AES: Advanced Encryption Standard;(128bits,192bits,256bits,384bits)
Blowfish
Twofish
IDEA
RC6
CASTS
DES: Data Encryption Standard,该加密方式已经寿终正寝了
3DES:Triple DES ;
AES: Advanced Encryption Standard;(128bits,192bits,256bits,384bits)
Blowfish
Twofish
IDEA
RC6
CASTS
非对称加密
基本概念:密钥分为公钥与私钥,
公钥:从私钥中提取产生,可公开给所有人,pubkey
私钥:通过工具创建,使用者自己留存,必须保证其私密性,secret key
公钥:从私钥中提取产生,可公开给所有人,pubkey
私钥:通过工具创建,使用者自己留存,必须保证其私密性,secret key
特点:用公钥加密的数据,只能使用与之配对的私钥解密,反之亦然;
用途
数字签名(身份认证):主要用户让接收方确认发送方的身份
密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方
数据加密:不常用,因为此种方式加密效率太低,比对称加密要慢3个数量级
算法:RSA、DSA、ELGamal
基于非对称密钥的通信过程:模拟A给B发送数据
1、A首先对原始数据进行单向加密,比如常见的MD5算法,定长输出一个数据特征码
2、A利用自己的私钥对特征码进行加密,并附加在数据后面
3、A生成一个临时的对称密钥,对以上的整个数据进行加密
4、A利用B的公钥加密第3步的对称密钥,附加在数据后面并将以上所有数据发送给B
1、A首先对原始数据进行单向加密,比如常见的MD5算法,定长输出一个数据特征码
2、A利用自己的私钥对特征码进行加密,并附加在数据后面
3、A生成一个临时的对称密钥,对以上的整个数据进行加密
4、A利用B的公钥加密第3步的对称密钥,附加在数据后面并将以上所有数据发送给B
其实以上有一个最大的漏洞,就是A怎么确认拿到B的公钥就一定是B的,会不会有人冒充B呢,此时就引入了CA
单向加密
即提出数据指纹,只能加密,不能解密
特性:定长输出、雪崩效应
功能:校验数据的完整性
算法:
md5:Message Digest 5,128bits
sha1:Secure Hash Algorithm 1, 160bits,除此之外sha还有sha224,sha256,sha384, sha512
md5:Message Digest 5,128bits
sha1:Secure Hash Algorithm 1, 160bits,除此之外sha还有sha224,sha256,sha384, sha512
密钥交换IKE(Internet Key Exchange)
1、公钥加密,通过公钥来加密对称密钥,并发送给对方
2、DH(Deffie-Hellman)
下面对DH算法做个简单的说明:A、B分别为两个用户;p,g为他们协商生成的随机数
A:p,g
B:p,g
A:x
-->p^x%g ==>B
A: (p^y%g)^x
B:y
-->p^y%g ==>A
B: (p^x%g)^y
A:p,g
B:p,g
A:x
-->p^x%g ==>B
A: (p^y%g)^x
B:y
-->p^y%g ==>A
B: (p^x%g)^y
其它IKE算法:RSA,DH(迪菲-赫尔曼),ECDH(椭圆曲线DH),ECDHE(临时椭圆曲线DH)
PKI公钥基础设施
签证机构CA
注册机构RA
证书吊销列表CRL
证书存取库
X509
概述:定义了证书的结构和认证的协议标准
字段属性结构
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者的唯一标识
主体的唯一标识
扩展
发行者的签名
TLS/SSL
TLS
TLS:Transport Layer Security,由IETF组织在1999年发布,先后发布有v1.0,v1.1,v1.2,v1.3,几乎已经成为现在实际使用的事实标准
分层设计
1、最底层:基础算法语言实现,aes,rsa,md5
2、向上一层:各种算法的实现
3、再向上一层:组合算法实现半成品
4、用各种组件拼装而成的各种成品密码学协议软件
SSL
SSL:Secure socker Layer,由Netscape网景公司在1994发布,先后发布v1.0,v2.0,v3.0, 因漏洞情况,在加上是商业的原因,几乎被废弃使用
SSL会话主要的三个步骤
客户端向服务器端索要并验证证书;
双方协商生成“会话密钥”
双方采用“会话密钥”进行加密通信
SSL Handshake Protocol的四个阶段
第一阶段:ClientHello:
支持的协议版本,比如TLS 1.2;
客户端生成的一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES,RSA
支持的压缩算法
支持的协议版本,比如TLS 1.2;
客户端生成的一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES,RSA
支持的压缩算法
第二阶段:ServerHello
确认使用的加密通信协议版本,比如TLS 1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法
服务器证书;
确认使用的加密通信协议版本,比如TLS 1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法
服务器证书;
第三阶段:
验证服务器证书,确认无误后取出其公钥; (证机构, 证书完整性, 证书持有者,证书有效期, 吊销列表)
发送以下信息给服务器端:
一个随机数
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
客户端握手结束通知
验证服务器证书,确认无误后取出其公钥; (证机构, 证书完整性, 证书持有者,证书有效期, 吊销列表)
发送以下信息给服务器端:
一个随机数
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
客户端握手结束通知
第四阶段:
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所用到的“会话密钥”
服务端握手结束通知
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所用到的“会话密钥”
服务端握手结束通知
OpenSSL
组件
libcrypto/libssl:主要由开发者使用
openssl:多用途命令行工具
命令分类
标准命令,enc,ca,req,genrsa,...
消息摘要命令(dgst子命令)
加密命令(enc子命令)
通过openssl命令对几种加密算法的实现
对称加密
工具: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 enc -e -des3 -a -salt -in ./fstab -out ./fstab.ciphertext
解密:]# openssl enc -d -des3 -a -salt -out ./fstab -in ./fstab.ciphertext
单向加密
工具:openssl dgst,md5sum,sha1sum,sha224sum,...
dgst命令:
~]# openssl dgst -md5 /PATH/TO/SOMEFILE
~]# openssl dgst -md5 /PATH/TO/SOMEFILE
生成用户密码
工具:passwd,openssl passwd
]# openssl passwd -1 -salt SALT
生成随机数
工具:openssl rand
]# openssl rand -hex NUM 16进制编码方式
]# openssl rand -base64 NUM base64编码方式
]# openssl rand -base64 NUM base64编码方式
公钥加密
加密解密
算法:RSA,ELGamal
工具:openssl rsautl,gpg
工具:openssl rsautl,gpg
数字签名
算法:RSA,DSA,ELGamal
工具:openssl rsautl,gpg
工具:openssl rsautl,gpg
密钥交换
算法:DH
生成密钥对
生成私钥:]# (umask 077; openssl genrsa -out /tmp/myprivate.key 2048)
提出公钥:]# openssl rsa -in /tmp/myprivate.key -pubout
提出公钥:]# openssl rsa -in /tmp/myprivate.key -pubout
Linux随机数生成器
/dev/random:仅从熵池返回随机数,随机数用尽,阻塞
/dev/urandom:从熵池返回随机数,随机数用尽,会利用软件生成伪随机数,非阻塞
伪随机数不安全
熵池中随机数的来源
硬盘IO中断时间间隔
键盘IO中断时间间隔
CA
分类
公共CA
私有CA
构建工具
openssl
构建私有CA
说明:在确认配置为CA服务器上生成一个自签名证书,并为CA提供所需的目录及文件即可
1)生成私钥:
]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
]# (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 3650
]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
- -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
]# 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 /etc/httpd/ssl/httpd.key 2048)
]# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl
]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成证书签署请求
]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 3650
]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 3650
3)将签署请求通过可靠方式发送给CA主机
4)在CA主机上签署证书
]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 3650
]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 3650
查看证书中的信息
]# openssl x509 -in /etc/pki/CA/certshttpd.crt -noout -serial -subject
]# openssl x509 -in /etc/pki/CA/certshttpd.crt -noout -serial -subject
吊销证书
1)客户端获取要吊销的证书的serial(在使用证书的主机执行)
2)CA主机吊销证书
先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致
吊销:
]# openssl ca -revoke /etc/pki/CA/netcerts/SERIAL.pem
其中的SERIAL要换成证书真正的序列号
先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致
吊销:
]# openssl ca -revoke /etc/pki/CA/netcerts/SERIAL.pem
其中的SERIAL要换成证书真正的序列号
3)生成吊销证书的吊销编号(第一次吊销证书时才执行)
]# echo 01 >/etc/pki/CA/crlnumber
]# echo 01 >/etc/pki/CA/crlnumber
4)更新证书吊销列表
]# openssl ca -gencrl -out thisca.crl
]# openssl ca -gencrl -out thisca.crl
查看crl文件:
]# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
]# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
OpenCA
linux系统下openssl配置文件:/etc/pki/tls/openssl.cnf
收藏
0 条评论
下一页