转载地址:https://blog.csdn.net/jinbusi_blog/article/details/76039206?locationNum=4&fps=1算法
ssl协议安全
SSL: (Secure Socket Layer)安全套接层,ssl是一套安全协议,被应用层调用,当http调用ssl协议时被称为https,当ftp调用ssl协议时被称为sftp。
lls是一个协议的集合 ,其中包括: 服务器
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换ide
ChangeCipherSpec协议:一条消息代表握手协议已经完成;工具
Alert协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL连接,而warning级别的错误SSL连接扔可继续,只是会给出错误警告编码
Record协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等;加密
HTTPS协议:就是"HTTP协议"和"SSL/TLS协议"的组合。"HTTP over SSL"或"HTTP over TLS", 对http协议的文本数据进行加密处理后,成为二进制形式传输。idea
ssl起源.net
Netscape:1994 命令行
v1.0,
1995 : sslv2.0
1996 : v3.0
IETF : 1999
tlsv1.0
2006 : tls v1.1 RFC4346
2008 : tls v1.2
2015 : tls v1.3
分层设计
- 最底层:基础算法原语的实现,aes,rsa,md5
- 向上一层,各类算法的实现;
- 再向上一层 : 组合算法实现的半成品;
- 用各类组件拼装而成的各类成品密码学协议软件。
通讯流程
ssl通讯的两个阶段:
两阶段协议,分为握手阶段和应用阶段
握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通讯中使用的安全参数、密码套件以及主密钥。后续通讯使用的全部密钥都是经过MasterSecret生成。
应用阶段: 在握手阶段完成后进入,在应用阶段通讯双方使用握手阶段协商好的密钥进行安全通讯
https的通讯流程:
客户端向服务端发起请求,服务端将本身的证书发送给客户端,
客户端使用内置于系统中的ca的公钥进行解密,解密成功即表示ca是合法的。
若是有须要客户端将本身的证书发送给客户端
客户端生成一个本身的对称密钥,使用服务端的公钥进行加密,发送给服务端。
服务端使用本身的私钥解密收到的加密过的对称密钥,
双方使用对称密钥进行通讯,(http协议调用ssl协议对自身的数据进行密钥加密,被加密的http数据为二进制)
ssl协议的开源实现:OpenSSL
ssl做为协议出现,协议是被具体定义的概念,openssl是ssl的具体的实现,openssl也是一套开源的软件。
openssl包括三方面的组件:
1.openssl:多用途的命令行工具,包openssl
2.libcrypto: 加密算法库,包openssl-libs
3.libssl: 加密算法实现模块库,包nss
openssl工具使用
openssl支持交互式模式,指定参数。
交互式:
? :帮助
OpenSSL> ?
openssl:Error: '?' is an invalid command.Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
dhparam dsa dsaparam ec
ecparam enc engine errstr
gendh gendsa genpkey genrsa
nseq ocsp passwd pkcs12
pkcs7 pkcs8 pkey pkeyparam
pkeyutl prime rand req
rsa rsautl s_client s_server
s_time sess_id smime speed
spkac ts verify version
x509Message Digest commands (see the `dgst' command for more details)
man dgst 查看此类命令的帮助
md2 md4 md5 rmd160
sha sha1Cipher commands (see the `enc' command for more details)
man enc 查看此类命令的帮助
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb
camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb
camellia-256-cbc camellia-256-ecb cast cast-cbc
cast5-cbc cast5-cfb cast5-ecb cast5-ofb
des des-cbc des-cfb des-ecb
des-ede des-ede-cbc des-ede-cfb des-ede-ofb
des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea
idea-cbc idea-cfb idea-ecb idea-ofb
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 seed seed-cbc seed-cfb
seed-ecb seed-ofb zlib
非交互方式:
enc: (encrypt)加密或解密,用于对称加密
-e : 加密
-d : 解密
-des3 : 指定加密算法des3
-a
-salt : 加盐
-in : 输入的文件
-out : 输出的文件
例子:
加密
# openssl enc -e -des3 -a -salt -in /etc/passwd -out ./haha.ssl
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
# ll /etc/passwd ./haha.ssl
-rw-r--r--. 1 root root 3329 7月 14 18:21 /etc/passwd
-rw-r--r-- 1 root root 4542 7月 16 17:02 ./haha.ssl
解密:
# openssl enc -d -des3 -a -salt -in ./haha.ssl -out ./haha.txt
enter des-ede3-cbc decryption password:
dgst用于单向加密,即生成哈希值
-md5 : 指明算法
例子:
# openssl dgst -md5 haha.txt MD5(haha.txt)= 7d75659008a5a2f28cac1d2582d28491 passwd 生成密码的哈希值: -1(数字1) : md5算法 -salt 指定加的盐 例: [root@localhost ~]# openssl passwd -1 Password: Verifying - Password: $1$2otXR/.E$e2e0kTulm8LiSAKEgjKeD/ 指定加盐,可是加盐以后只输入了一次密码 # openssl passwd -1 -salt asd Password: $1$asd$49QSDotWo6cyq5JpfBDQ4.
rand: 生成随机数
格式openssl rand 编码方式 字节数。
-base64 使用base64编码格式
-hex 使用hex编码格式
# openssl rand -hex 2 380d # openssl rand -base64 2 UR8= genras 生成私钥(仅生成私钥,公钥是从私钥中提取出来的) -out 生成的密钥文件 -des 使用对称密钥对生成的非对称密钥文件机密(可选参数) 格式 openssl genras -out 文件 -des 非对称密钥长度(多少位) 生成非对称密钥 openssl genras -out /root/haha.key Generating RSA private key, 1024 bit long modules ..................................++++++ ..................++++++ e is 65537 (0x10001) 指定使用对称密钥对生成的密钥文件加密 # openssl genras -out /root/haha-des.key -des 1024 Generating RSA private key, 1024 bit long modulus ......++++++ .++++++ e is 65537 (0x10001) Enter pass phrase for /root/haha-des.key: Verifying - Enter pass phrase for /root/haha-des.key: 使用umask决定文件权限 # (umask 066 ; openssl genrsa -out jinbus.key -des 2048) Generating RSA private key, 2048 bit long modulus .................................+++ ...................+++ e is 65537 (0x10001) Enter pass phrase for jinbus.key: Verifying - Enter pass phrase for jinbus.key: [root@localhost ~]# ll jinbus.key -rw------- 1 root root 1738 7月 16 17:39 jinbus.key
ras显示密钥
-in 获取公钥的私钥文件
-pubout从私钥中获取公钥
-out 保存获取的公钥的文件
例: 查看文件中的私钥 # openssl ras -in jinbus.key Enter pass phrase for jinbus.key: writing RSA key -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA3WuQa0EZ91BC2M9an99TqX5FJlBCqDSXuM/DS6RDzPuY6CwQ l7nC11sMGxqC3ilXcfIKuCiKAX6uuAXI3Kskno5o8ftjyS1caiOdboTuUpqVaWFw iGCygbNWKKrgV01b3FN/InrX46SGB4KlJ/soCl+kNa3MF4PiVowGKaVzepJJD8X6 hElaVIumQPKjSx7ZKiI/e89HnwxAGUTxtr6Oq3EcCSuXPKhz+FaAw9GsW0wKevyw sUkGsEAWA2DZRyw3n5+rsVJn+BbIoURIW2cPiXhSnSl2xP57ThtogPtro2iv3O3C 7+9xczsahG3GbN+NwK4FGT+JZH5AJj18rk+6ywIDAQABAoIBADhUojQ3JsT9fVQt RJABwAYR4sPBjYO/hY32BWhcDQe8RoVimIIRN1mUhzrp/rtIZz/M5R8+6QVCVm7o wdYqEDHqZxaQ7y0CRk2Wa/nvBbasLzDVIkz/1MocduH3vwVW3/TopSJ/gCcg9xw4 B45pXiFtfZhOc+rTmaSNERBNUFixH0ryxFBqkuPb1bUaWumnOhMSIwgpkiCzy3on v8/BuLHP3ySFb+94QvOsqInV2uYqXfLw7Tks2ETxmapvssWHzigrnvl5JyFb/UMH rw5y4DCT+Ha9Brp22KuzBJx04UeCfAjVAlAiLUnjJH/IupNmCQhIsxW72IM+DdnJ GkM4K3kCgYEA/uOVvFpwegQ/LAVKpNyOs+KYz17Oj/VXcrxjiCjFm213bH/Mnb+k jhP/HNov2AGQTvNk+FwzjGIX+fMosNcb7+VegKA/opxWSJbw4tdaJK0SZmTFWJ33 JyXdKrsW8nA7cxKKaAwrKdnHBo9RXR3VomxsgmjvVVyt04FPJp1zLy8CgYEA3mKi Jr7cbwYkcMKuBx9JkROTO3mAnPkicYuxH71FPPMB8mnPLQDEK/gne2Wcad57Olmv hDgAhyEYHdgIay3FU3Fy0kWozXUha+U3MIq7BhuMH43AsjxgoGHbUzM8v6OKyDOY HBbH9UzUW6WuLaP39q+xrq/mWQxN4cDA4xqyZyUCgYBWsewVM6G8LsOZ4nbgGlDD aJhXOEUD/Avxb5hfEJcd5Z7QHavoH+4FkVGda60ISIfgArNeMmYqIpdLIeS+OXw8 HYUGNPtQAOLsL8LhNSRpAyEWCMKDAL+25g8S4K3OalQeMLk46KKpynQCjC69gE9Q vpYtySlWnH5XSU01sioiawKBgQCENJzzbcn8Uul9A6+T2lzQ25NO6zezmkSIviQp m0q7JjiFFbQtq+Pzw84tBMZNBg+6K7E1aFmf++Orck/m78n8hlhdez4UDss0qor5 16/BvMS7yXjCPTSwhBxwROibgS0zQcDvCfgL84XXihKXXYA/bkmycS3+yFrQl9fT 634d5QKBgBbPFkeAaGjzmLgIAfG1l/SIwjJhvH2n+xUt2YtV0VR9A07HKR/dda/9 L8vOlfegi3bODf+gwABOecbfKayzv6P+yQX6gBLaNvCXr1eE2Ob76Iwi2wb7UplL 3AU54zZlDFvH8YRl5fUVZGeJjyvGatViwuVDLvYCEz5tGos4rTyo -----END RSA PRIVATE KEY-----
req请求
-new : 生成新证书签署请求
-x509 : 专用于CA生成自签证书
-key : 生成请求时用到的私钥文件
-days n : 证书的有效期限
-out /PATH/TO/SOMECERTFILE : 证书的保存路径
x509查看证书中的信息
格式: openssl x509 -in 文件名称 -noout
-text|issuer|subject|serial|dates
openssl x509 -in 证书 -noout -text : 查看证书
ca 生成ca证书
-days 证书有效期
-in 证书的申请文件
-out 生成的证书