一, 加密算法
1, 对称加密
概念: 加密和解密使用同一个秘钥
算法: DES,3DES,AES,Blowfish,Twofish,IDEA,RC6,CAST5 等
优点: 效率高; 将数据分割成固定大小的块, 逐个进行加密
缺点: 每一个通信就需要一个秘钥; 秘钥传递不安全; 无法确定数据来源
2, 非对称加密
公钥与私钥: 公钥是公开给所有人的; 私钥是只有自己知道; 通过私钥可以推算出公钥, 但是通过私钥无法退出公钥; 使用公钥加密必须使用私钥解密, 或者使用私钥加密必须使用公钥解密; 公私钥必须成对出现
算法: RSA,DSA,ELGamal
优缺点: 可以实现数字签名来验证数据来源; 可以安全的交换对称秘钥; 可以实现时间加密, 但是对应大的数据解密时效率太低, 适合加密少量数据
3, 单向散列(hash)
特性:
1)雪崩效应: 数据不同, 摘要一定大不同
2)单向: 不可反推数据
3)摘要长度固定大小
算法: md5:128,sha1:160,sha224,sha256,sha384,sha512
功能: 用来验证数据的完整性
4, 秘钥交换算法(DH)
1)A 和 B 协商生成公开的整数 a, 大素数 p
2)A: 生成隐私数据 :x(x<p), 计算得出 a^x%p, 发送给 B;B: 生成隐私数据 :y(y<p), 计算得出 a^y%p, 发送给 A
3)A: 计算得出 [(a^y%p)^x] %p = a^xy%p, 生成为密钥; B: 计算得出 [(a^x%p)^y] %p = a^xy%p, 生成为密钥
5, 在安全通信过程中:
爱丽丝:
1)原数据通过 hash 算法得出一个摘要;
2)用爱丽丝的私钥加密摘要;
3)将加密的摘要和原数据一块使用对称秘钥加密;
4)再用鲍勃的公钥将对称秘钥加密;
5)密文数据发送 ---->
鲍勃:
1)<---- 接受密文数据;
2)使用鲍勃的私钥解密对称秘钥;
3)使用对称秘钥解密原数据和加密后的摘要;
4)使用爱丽丝的公钥解密摘要;
5)计算原数据的 hash 摘要并和解密后的摘要进行比较, 从而确定原始数据的完整性.
二, 传输层安全协议 TLS
TLS:Transport Layer Security 及其前身安全套接层 SSL 是一种安全协议, 目的是为互联网通信, 提供安全及数据完整性保障.
特性: 可以保证数据传输的机密性, 完整性, 可实现认证, 重放保护 (重放: 由中间人捕获到加密的数据再次传输到目的服务器, 有可能会影响账户的安全) 等功能.
TLS 协议分俩个阶段: 握手阶段(协商阶段): 客户端和服务器端认证对方身份(依赖于 PKI 体系, 利用数字证书进行身份认证), 并协商通信中使用的安全参数, 密码套件以及主密钥. 后续通信使用的所有密钥都是通过 MasterSecret 生成. 应用阶段: 在握手阶段完成后进入, 在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信.
Handshake 协议: 包括协商安全参数和密码套件, 服务器身份认证(客户端身份认证可选), 密钥交换
ChangeCipherSpec 协议: 一条消息表明握手协议已经完成
Alert 协议: 对握手协议中一些异常的错误提醒, 分为 fatal 和 warning 两个级别,
atal 类型错误会直接中断 SSL 链接, 而 warning 级别的错误 SSL 链接仍可继续, 只是会给出错误警告
Record 协议: 包括对消息的分段, 压缩, 消息认证和完整性保护, 加密等
HTTPS 协议: 就是 "HTTP 协议" 和 "SSL/TLS 协议" 的组合. HTTP over SSL"或"HTTP over TLS", 对 http 协议的文本数据进行加密处理后, 成为二进制形式传输
三, CA 和证书
数字证书认证机构(Certificate Authority, 缩写为 CA), 也称为电子商务认证中心, 电子商务认证授权机构, 是负责发放和管理数字证书的权威机构, 并作为电子商务交易中受信任的第三方, 承担公钥体系中公钥的合法性检验的责任.
PKI: 公开密钥基础建设, 包括签证机构 (CA), 注册机构(RA), 证书吊销列表(CRL) 以及证书存取库.
X.509: 定义了证书的结构以及认证协议标准, 包括版本号, 序列号, 签名算法, 颁发者, 有效期限, 主体名称, 主体公钥, CRL 分发点, 扩展信息, 发行者签名等信息
ca 证书颁发机构分根 ca 和子 ca, 根 ca 的证书为自签证书, 然后再为子 ca 颁发证书; 用户只要信任了根 ca 的证书则就是信任了子 ca 颁发的证书.
相关配置文件:/etc/pki/tls/openssl.cnf
- ####################################################################
- [ ca ]
- default_ca = CA_default #默认 CA, 在一台服务器可以搭建多个 CA
- [ CA_default ] #默认 CA 的配置
- dir = /etc/pki/CA #工作目录
- certs = $dir/certs #存放证书
- crl_dir = $dir/crl #存放证书吊销列表
- database = $dir/index.txt #数据库索引文件, 需要手动创建
- new_certs_dir = $dir/newcerts #新证书的路径
- certificate = $dir/cacert.pem #CA 的证书文件
- serial = $dir/serial #下一个要颁发的证书序列号, 16 进制
- crlnumber = $dir/crlnumber #下一个要吊销的证书序列号
- crl = $dir/crl.pem #证书吊销列表
- private_key = $dir/private/cakey.pem#CA 的私钥文件
- RANDFILE = $dir/private/.rand #生成私钥需要用到的随机数文件
- default_days = 365 #默认颁发证书的有效期
- default_crl_days= 30 #30 天发布一次证书吊销列表
- default_md = sha256 #
- preserve = no #
- policy = policy_match #策略匹配, 定义客户端和服务端申请证书时的信息匹配策略
- [ policy_match ]
- countryName = match #必须匹配
- stateOrProvinceName = match
- organizationName = match
- organizationalUnitName = optional #不要求必须匹配
- commonName = supplied #必须提供
- emailAddress = optional
示例: 搭建一个私有 CA
服务端搭建:
1, 生成 CA 的私钥
# (umask 066; 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
- Country Name (2 letter code) [XX]:CN
- State or Province Name (full name) []:beijing
- Locality Name (eg, city) [Default City]:beijing
- Organization Name (eg, company) [Default Company Ltd]:test
- Organizational Unit Name (eg, section) []:it
- Common Name (eg, your name or your server's hostname) []:ca.test.com
- Email Address []:
-new: 生成新证书签署请求
-x509: 专用于 CA 生成自签证书
-key: 生成请求时用到的私钥文件
-days n: 证书的有效期限
-out /PATH/TO/SOMECERTFILE: 证书的保存路径
3, 创建必要的文件
- # touch /etc/pki/CA/index.txt
- # echo 01>/etc/pki/CA/serial
- # openssl x509 -in /etc/pki/CA/cacert.pem -noout -text [-subject | -issuer | -dates] 查看证书信息
客户端生成注册申请请求:
1, 生成私钥
# (umask 077; openssl genrsa -out app.key 1024)
2, 生成签署请求
- # openssl req -new -key app.key -out app.csr
- Country Name (2 letter code) [XX]:CN
- State or Province Name (full name) []:beijing
- Locality Name (eg, city) [Default City]:beijing
- Organization Name (eg, company) [Default Company Ltd]:test
- Organizational Unit Name (eg, section) []:it
- Common Name (eg, your name or your server's hostname) []:app.test.com
- Email Address []:
- A challenge password []:
- An optional company name []:
3, 将签署请求发送给 CA
# scp app.csr 192.168.0.7:/etc/pki/CA/
服务器端签署:
1, 签署请求
# openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 100
2, 将签署后的证书发回客户端
# scp /etc/pki/CA/certs/app.crt 192.168.0.6:/root
CA 吊销证书的管理
生成吊销列表
- [root@centos7 CA]# echo 01>/etc/pki/CA/crlnumber
- [root@centos7 CA]# openssl ca -gencrl -out crl.pem
查看吊销列表
[root@centos7 CA]# openssl crl -in crl.pem -noout -text
查看证书状态
- [root@centos7 CA]# cat index.txt
- V(正常证书) 180826054533Z 01 unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com
- [root@centos7 CA]# openssl ca -status 01
- Using configuration from /etc/pki/tls/openssl.cnf
- 01=Valid (V)(正常证书)
吊销证书
- [root@centos7 CA]# openssl ca -revoke newcerts/01.pem
- [root@centos7 CA]# cat index.txt
- R (已被吊销) 180826054533Z 180518060712Z 01 unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com
四, 管理工具
md5sum,sha1sum,sha224sum,sha256sum ,sha384sum ,sha512sum: 计算散列值
--check: 检查 md5 值是否正确
gpg:GunPG
-c file: 加密文件
-o file -d file.gpg: 解密文件
--gen-key: 生成非对称秘钥
--list-keys: 查看已有公钥
-e -r keyname file: 使用指定公钥加密文件
--import filename.pubkey: 导入公钥
-a --export -o filename.pubkey: 导出公钥
--delete-secret-keys keyname: 删除私钥
--delete-keys keyname: 删除公钥
# rngd -r /dev/urandom #提供随机数来生成秘钥
openssl: 多用途的工具集
组件:
openssl: 多用途的命令行工具, 包 openssl
libcrypto: 加密算法库, 包 openssl-libs
libssl: 加密模块应用库, 实现了 ssl 及 tls, 包 nss
子命令:
- enc
- # openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher 使用 - des3 加密算法对称加密 testfile 文件
- # openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile 解密
-e 加密
-d 解密
-des3 | -des | -des 加密算法
-a 表示使用 base64 编码
编码: base64 === a-z A-Z 0-9 / + 64 个字符
-salt 加盐
dgst -md5 | -hex 单向加密
passwd -1 -salt 生成 MD5 加密密码
- rand -base64 | -hex # 生成随机数
- genrsa:
- # (umask 066; openssl genrsa -out test.key -des 2048) 生成私钥并且使用 des 加密
- rsa:
- # openssl rsa -in test.key -out test2.key 将加密的私钥解密
- # openssl rsa -in test2.key -pubout -out test2.key.pub 从私钥中提取对应的公钥
个人学习笔记 记录于 22:16
来源: https://www.cnblogs.com/L-dongf/p/9047846.html