秘钥算法和协议
对称加密 加密和解密使用同一个秘钥
DES:Data Encryption Standard(不安全,容易被破解) 56位秘钥
3DES:Triple DES
AES:Advanced Encryption Standard;(安全性特别高)秘钥128bits 192bits 256bits,384bits
。。。
特性:
1、加密和解密使用同一个秘钥
2、将原始数据分割成固定大小的块,逐个进行加密;
缺陷:
1、秘钥过多;服务器要和每个访问者都要生成一个秘钥
2、秘钥分发困难;
公钥加密 :秘钥分为公钥和私钥 (比对称加密效率低很多)
公钥:从私钥中提取产生,公开给所有人:pubkey
私钥:通过工具创建,secret key;
特点:公钥加密私钥解密 私钥加密公钥解密
用途:
数字签名:让接收方确认发送方的身份
秘钥交换:发送方用对方的公钥加密一个对称秘钥,发送对方
数据加密
算法:RSA(可以作为签名也可以作为加密)、DSA(只能做签名)、ELGamal
单向加密:即提出数据指纹;只能加密,不能解密;
特征:定长输出
功能:完整性验证
算法:
md5 128 bits
sha1 160bits
密钥交换: IKE
首先 A要自己定义一个x数(随机的),同时和B约定一组数P和G(这两个数是公开的),然后A利用数据公式P^x%G=A1 得到A1这个数,然后把A1发给B,这个时候,虽然别人知道P和G和计算公式,但是也无法又A1反过来得到x。接着B收到了A1,B自己也定义一个只有自己知道的数y,然后跟A的做法一样,根据公式 P^y%G=B1 得到一个数B1发给A。这个时候,A拥有了B发给自己的B1,B拥有了A发给自己的A1,注意,这个时候A1和B1是不相等的,然后,A拿着B1再用公式 B1^x(其实就是P^y%G^x)得到一个B2,同理,B拿着A1也用公式A1^y(其实就是P^x%G^y)得到一个A2,然后大家就会发现其实B2是等于A2的,然后,A2,B2就是我们要的加密的秘钥,而且在整个过程中,A2或B2没有在网络上传输过,所以显得非常安全。
PKI:Public Key Infrastructure(公钥基础设施)
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:
x.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者的唯一标识
主体的唯一标识
扩展
发行者签名
SSL:Secure sockets Layer
网景公司开发1994
TLS:Transport Layer Secutity
IETF:1999 年发布
v1.0 v1.1 v1.2 v1.3
开源实现OpenSSL
对于Linux系统:OpenSSL ,GPG(pgp)
OpenSSL 由三部分组成:
libencrpt库
libssl库
客户端向服务器端索要证书并验证证书;
双方协商生成“会话秘钥”;
双方采用会话秘钥进行加密通信
第一阶段:ClientHello
支持的协议版本,比如tls1.2
客户端生成一个随机数,稍后用户生成“回话秘钥”
支持的加密算法,比如AES、RSA
支持的压缩算法
第二阶段:ServerHello(服务器回应)
确认使用的加密通信协议版本,比如tls1.2;
服务器端生成一个随机数,稍后用于生成“会话秘钥”
确认使用的加密方法
第三阶段:
验证服务器证书;
发送一下信息给服务器端
一个随机数
编码变更通知
客户端握手结束通知
第四阶段:
收到客户端发来的第三个随机数,计算生成本次会话所有的会话秘钥
服务端握手结束。
Openssl
众多子命令,分为三类
标准命令
消息摘要(dgst 子命令)
加密命令 (enc子命令)
标准命令:enc ca req genrsa 。。。。
对称加密
工具:openssl enc
//加密
openssl enc -e -des3 -a -salt -in aaa -out aaa.cipher
//解密
openssl enc -d -des3 -a -salt -in aaa.cipher -out ccc.plain
单向加密
openssl dgst
openssl dgst -md5 bbb.palin
生成随机数:
工具
openssl rand
openssl rand -base64 10 ==》3f38ii5B3BqKEA==
openssl rand -hex 10 == 》af7b04d09c1743a17ba7
生成私钥
openssl genrsa 1024 -out /tmp/mykey.private
提出公钥
openssl rsa -in /tmp/mykey.private -pubout
CA:
公共CA 和私有 CA
openssl ca配置文件
/etc/pki/tls/openssl.cnf
构建私有的CA
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;
步骤:
(1) 生成私钥
openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096
(2) 生成自签证书
openssl req -new -key -x509 /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
(3) 为CA提供所需的目录及文件
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
touch /ect/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial
要用到证书进行安全通信的服务器,需要向CA请求签署证书;
步骤:以httpd为例
(1) 用到的证书的主机生成私钥;
mkdir /etc/httpd/ssl
cd /etc/httpd/ssl
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 365
(3)将请求通过可靠方式发送给CA主机;
(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 -noout -serial -subject
吊销证书
步骤
(1) 客户端获取要吊销证书的serial(在使用证书的主机执行)
xpenssl 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/crlnumber
(4) 更新证书吊销的列表
openssl ca -gencrl -out thisca.crl
查看crl文件:
openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
对称加密 加密和解密使用同一个秘钥
DES:Data Encryption Standard(不安全,容易被破解) 56位秘钥
3DES:Triple DES
AES:Advanced Encryption Standard;(安全性特别高)秘钥128bits 192bits 256bits,384bits
。。。
特性:
1、加密和解密使用同一个秘钥
2、将原始数据分割成固定大小的块,逐个进行加密;
缺陷:
1、秘钥过多;服务器要和每个访问者都要生成一个秘钥
2、秘钥分发困难;
公钥加密 :秘钥分为公钥和私钥 (比对称加密效率低很多)
公钥:从私钥中提取产生,公开给所有人:pubkey
私钥:通过工具创建,secret key;
特点:公钥加密私钥解密 私钥加密公钥解密
用途:
数字签名:让接收方确认发送方的身份
秘钥交换:发送方用对方的公钥加密一个对称秘钥,发送对方
数据加密
算法:RSA(可以作为签名也可以作为加密)、DSA(只能做签名)、ELGamal
单向加密:即提出数据指纹;只能加密,不能解密;
特征:定长输出
功能:完整性验证
算法:
md5 128 bits
sha1 160bits
密钥交换: IKE
公钥秘钥,缺点是加密后的秘钥还是通过网络传给对方,有风险
首先 A要自己定义一个x数(随机的),同时和B约定一组数P和G(这两个数是公开的),然后A利用数据公式P^x%G=A1 得到A1这个数,然后把A1发给B,这个时候,虽然别人知道P和G和计算公式,但是也无法又A1反过来得到x。接着B收到了A1,B自己也定义一个只有自己知道的数y,然后跟A的做法一样,根据公式 P^y%G=B1 得到一个数B1发给A。这个时候,A拥有了B发给自己的B1,B拥有了A发给自己的A1,注意,这个时候A1和B1是不相等的,然后,A拿着B1再用公式 B1^x(其实就是P^y%G^x)得到一个B2,同理,B拿着A1也用公式A1^y(其实就是P^x%G^y)得到一个A2,然后大家就会发现其实B2是等于A2的,然后,A2,B2就是我们要的加密的秘钥,而且在整个过程中,A2或B2没有在网络上传输过,所以显得非常安全。
PKI:Public Key Infrastructure(公钥基础设施)
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:
x.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者的唯一标识
主体的唯一标识
扩展
发行者签名
SSL:Secure sockets Layer
网景公司开发1994
TLS:Transport Layer Secutity
IETF:1999 年发布
v1.0 v1.1 v1.2 v1.3
开源实现OpenSSL
对于Linux系统:OpenSSL ,GPG(pgp)
OpenSSL 由三部分组成:
libencrpt库
libssl库
openssl 多用途命令行工具
客户端向服务器端索要证书并验证证书;
双方协商生成“会话秘钥”;
双方采用会话秘钥进行加密通信
第一阶段:ClientHello
支持的协议版本,比如tls1.2
客户端生成一个随机数,稍后用户生成“回话秘钥”
支持的加密算法,比如AES、RSA
支持的压缩算法
第二阶段:ServerHello(服务器回应)
确认使用的加密通信协议版本,比如tls1.2;
服务器端生成一个随机数,稍后用于生成“会话秘钥”
确认使用的加密方法
第三阶段:
验证服务器证书;
发送一下信息给服务器端
一个随机数
编码变更通知
客户端握手结束通知
第四阶段:
收到客户端发来的第三个随机数,计算生成本次会话所有的会话秘钥
服务端握手结束。
Openssl
众多子命令,分为三类
标准命令
消息摘要(dgst 子命令)
加密命令 (enc子命令)
标准命令:enc ca req genrsa 。。。。
对称加密
工具:openssl enc
//加密
openssl enc -e -des3 -a -salt -in aaa -out aaa.cipher
//解密
openssl enc -d -des3 -a -salt -in aaa.cipher -out ccc.plain
单向加密
openssl dgst
openssl dgst -md5 bbb.palin
生成随机数:
工具
openssl rand
openssl rand -base64 10 ==》3f38ii5B3BqKEA==
openssl rand -hex 10 == 》af7b04d09c1743a17ba7
生成私钥
openssl genrsa 1024 -out /tmp/mykey.private
提出公钥
openssl rsa -in /tmp/mykey.private -pubout
CA:
公共CA 和私有 CA
openssl ca配置文件
/etc/pki/tls/openssl.cnf
构建私有的CA
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;
步骤:
(1) 生成私钥
openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096
(2) 生成自签证书
openssl req -new -key -x509 /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
(3) 为CA提供所需的目录及文件
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
touch /ect/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial
要用到证书进行安全通信的服务器,需要向CA请求签署证书;
步骤:以httpd为例
(1) 用到的证书的主机生成私钥;
mkdir /etc/httpd/ssl
cd /etc/httpd/ssl
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 365
(3)将请求通过可靠方式发送给CA主机;
(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 -noout -serial -subject
吊销证书
步骤
(1) 客户端获取要吊销证书的serial(在使用证书的主机执行)
xpenssl 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/crlnumber
(4) 更新证书吊销的列表
openssl ca -gencrl -out thisca.crl
查看crl文件:
openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text