openssl学习
安全机制:
加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
认证
访问控制
数据保密性
连接保密性
无连接保密性
流量保密性
数据完整性
不可否认性
设计基本原则
使用成熟的安全系统
以小人之心度输入数据
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好你的系统
安全算法
常用安全技术
认证授权
安全通信
密码算法和协议:
对称加密
公钥加密
单向加密
认证协议
Linux系统:OpenSSL,gpg(pgp协议的实现)
对称加密算法
对称加密:加密和解密使用同一个密钥
1算法公开
2秘钥不公开
A--data-加密kev-data'-解密key2-data-B
DES keyl = key2
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced(128,192,256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
特性:
1、加密、解密使用同一个密钥,效率高 2、将原始数据分割成固定大的块,逐个进行加密
缺陷:
1、密钥过多 2、密钥分发 3、数据来源无法确认
非对称加密算法
公钥加密:密钥是成对出现
>公钥:公开给所有人;public key
>私钥:自己留存,必须保证其私密性;secret key
特点:
用公钥加密数据,只能使用与之配对的私钥解密;反之亦然 ## 功能: ``` >数字签名:主要在于让接收方确认发送方身份 >对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方 >数据加密:适合加密较小数音 ```
缺点:
密钥长,加密解密效率低
算法:
RSA(加密,数字签名),DSA(数字签名),ELGamal
Pb{Sa(data)} Pb{data+Sa {hash(data)}} hash(data) Pa(Sa {hash(data)}) key{data+Sa (hash(data))}+Pb(key)
密钥交换
密钥交换:IKE(Internet Key Exchange)
公钥加密: DH(Deffie-Hellman):生成会话密钥,参看: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
DH:
1、A:a.p协商生成公开的整数a,大素数p B:a,p
2、A:生成隐私数据x区p),计算得出a~×%p,发送给B
B:生成隐私数据y,计算得出-a~y%p,发送给A
3、A:计算得出[(a~y%p)~x]%p=a~xy%p,生成为密钥
B:计算得出[(a~×%p)~y]%p=a~xy%p,生成为密钥
a=2,p=11
A:x=3
B: y=4
2^3=8%11=8
2^4=16%11=5
[5^3]%11=4
[8^4]%11=4
使用gpg实现对称加密
对称加密file文件
gpg-c file
Is file.gpg
在另一台主机上解密file
gpg-o file-d file.gpg
使用gpg工具实现公钥加密
在hostB主机上用公钥加密,在hostA主机上解密
在hostA主机上生成公钥/私钥对
gpg --gen-key
在hostA主机上查看公钥
gpg --list-keys
在hostA主机上导出公钥到wang.pubkey
gpg -a --export -o wang.pubkey (-a以一定格式)
从hostA主机上复制公钥文件到需加密的B主机上
scp wang.pubkey hostB
在需加密数据的hostB主机上生成公钥/私钥对
gpg --list-keys
gpg --gen-key
在hostB主机上导入公钥
gpg --import wang.pubkey
gpg --list-keys
用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.9pg 工再数音
gpg -e -r wangxiaochun file
file file.gpg
复制加密文件到hostA主机
scp fstab.gpg hostA:
在hostA主机解密文件
gpg -d file.gpg
gpg -o file -d file.gpg
删除公钥和私钥
gpg- -delete-keys wangxiaochun
gpg--delete-secret-keys wangxiaochun
A、B非对称加密关键问题,拿到的是否是对方的公钥
是否有第三方C搞了一把错误的公钥给A,这时候A不但解不开B的数据, C如果获取还可以解开
CA和证书
PKI:Public Key Infrastructure
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号
主体公钥
序列号
CRL分发点
签名算法
扩展信息
颁发者
发行者签名
有效期限
主体名称
证书获取
证书类型:
证书授权机构的证书
服务器
用户证书
获取证书两种方法:·
使用证书授权机构
生成签名请求(csr)
将csr发送给CA
从CA处接收签名
自签名的证书
自已签发自己的公钥
安全协议
SSL:Secure Socket Layer
TLS:Transport Layer Security
1995:SSL 2.0 Netscape
1996:SSL3.01999:TLS 1.0
2006:TLS 1.1IETF(Internet工程任务组)RFC 4346
2008:TLS 1.2当前使用
2015:TLS 1.3
功能:机密性,认证,完整性,重放保护
两阶段协议,分为握手阶段和应用阶段
握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。
应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
Handshake协议:
包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
ChangeCipherSpec 协议:
一条消息表明握手协议已经完成
Alert协议:
对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
Record 协议:
包括对消息的分段、压缩、消息认证和完整性保护、加密等
HTTPS协议:
就是“HTTP协议”和“SSL/TLS协议”的组合。HTTP over-SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输
ethernet(ip(tcp(tls(app(data)))))
ethernet(ip(tcp(tls(app(data)))))
https://www.taobao.com
(CA私钥签名的公钥)Sca(Ptaobao)+有效期+CA+算法
CA公钥一般都是在电脑里面了 Ptaobao (得到公钥)
客户端生成sessionkey 用公钥加密, 服务端私钥解密
sessionkey(data)会话秘钥定期会更换
OpenSSL:开源项目
三个组件:
openssl:多用途的命令行工具,包openssl libcrypto:
加密算法库,包openssl-libs libssl:
加密模块应用库,实现了ssl及tls,包nss sopenssl命令:
两种运行模式:
交互模式和批处理模式
openssl version:程序版本号
标准命令、消息摘要命令、加密命令
标准命令:
enc,ca,req,…
Openssl命令
对称加密:
工具:openssl enc,9pg
算法:3des,aes,blowfish,twofish
enc命令:
帮助:man enc
加密:
openssl enc -e -des3 -a -salt -in testfile -out tesfile.cipher
解密:
openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile
单向加密:
工具:md5sum,sha1sum,sha224sum,sha256sum.. openssl dgst
dgst命令
帮助:man dgst
openssl dgst-md5[-hex默认]/PATH/SOMEFILE
openssl dgst-md5 testfile md5sum/PATH/TO/SOMEFILE ## MAC:Message.Authentication Code 单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制
CBC-MAC
HMAC:使用md5或sha1算法
生成用户密码:
passwd命令:
帮助:man sslpasswd
openssl passwd-1-salt SALT(最多8位)
openssl passwd-1-salt centos ## 生成随机数:
帮助:man sslrand
openssl rand -base64| -hex NUM
NUM:表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
公钥加密:
算法:RSA,ELGamal
工具:gpg.openssl rsautl(man rsautl) ## 数字签名:
算法:RSA,DSA,ELGamal ## 密钥交换:
算法:dh
DSA:Digital Signature,Algorithm
DSS:Digital Signature Standard
RSA
#生成公钥私钥
生成密钥对儿:
man genrsa
生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS (umask 077;openssl genrsa -out test.key -des 2048)(私钥太危险,使用对称密钥加密一下)
从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE openssl rsa -in test.key -pubout -out test.key.pub
随机数生成器:伪随机数字
键盘和鼠标
块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
PKI:Public Key Infrastructure
CA
RA
CRL
证书存取库 ## 建立私有CA:
OpenCA
openssl ## 证书申请及签署步骤:
1、生成申请请求
2、RA核验
3、CA签署
4、获取证书
创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
三种策略:匹配、支持和可选
匹配指要求申请填写的信息跟CA设置信息必须一致,支持指必须填写这项申请信息,可选指可有可无
1、创建所需要的文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01>/etc/pki/CA/serial 指定第一个颁发证书的序列号
2、CA自签证书
生成私钥cd/etc/pki/CA/
(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
生成自签名证书
openssl req -new -×509 -key
/etc/pki/CA/private/cakey.pem -days 7300 -out
/etc/pki/CA/cacert.pem
-new:生成新证书签署请求
-×509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days n:证书的有效期限
-out /PATH/TO/SOMECERTFILE:证书的保存路径
3、颁发证书
在需要使用证书的主机生成证书请求
给web服务器生成私钥
(umask 066;openssl genrsa-out /etc/pki/tls/private/test.key 2048)
生成证书申请文件
openssl req-new-key/etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr ### 将证书请求文件传输给CA ### CA签署证书,并将证书颁发给请求者
openssl ca -in /tmp/test.csr -out /etc/pki/CA/certs/test.crt -days 365
注意:默认国家,省,公司名称三项必须和CA一致
查看证书中的信息:
openssl ×509 -in /PATH/FROMWCERT_FILE-noout
-text|issuer|subject|serial|dates
openssl ca -status SERIAL 查看指定编号的证书状态 ## 4、吊销证书 ### 在客户端获取要吊销的证书的serial
openssl ×509 -in /PATH/FROM/CERT_FILE -noout -serial -subject ### 对比检验客户提交的serial与subject信息是否与index.txt文件中的信息一致
在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
指定第一个吊销证书的编号
注意:第一次更新证书吊销列表前,才需要执行
echo 01 > /etc/pki/CA/crlnumber ### 更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
查看cr文件:
openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text