ssl协议及开源实现openssl
轉載地址: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協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換
ChangeCipherSpec協議:一條消息表明握手協議已經完成;
Alert協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning兩個級別,fatal類型錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接扔可繼續,只是會給出錯誤警告
Record協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等;
HTTPS協議:就是"HTTP協議"和"SSL/TLS協議"的組合。"HTTP over SSL"或"HTTP over TLS", 對http協議的文本數據進行加密處理后,成為二進制形式傳輸。
?ssl起源
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
分層設計
通信流程
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 ? ? ? ? ??
x509 ? ? ? ? ? ? ?
Message Digest commands (see the `dgst' command for more details)
man dgst 查看此類命令的幫助
md2 ? ? ? ? ? ? ? md4 ? ? ? ? ? ? ? md5 ? ? ? ? ? ? ? rmd160 ? ? ? ? ? ?
sha ? ? ? ? ? ? ? sha1 ? ? ? ? ? ? ?
Cipher 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)= 7d75659008a5a2f28cac1d2582d28491passwd 生成密碼的哈希值:-1(數字1) : md5算法-salt 指定加的鹽例:[root@localhost ~]# openssl passwd -1Password:Verifying - Password:$1$2otXR/.E$e2e0kTulm8LiSAKEgjKeD/指定加鹽,但是加鹽之后只輸入了一次密碼# openssl passwd -1 -salt asdPassword:$1$asd$49QSDotWo6cyq5JpfBDQ4.rand: 生成隨機數
格式openssl rand 編碼方式 字節數。
-base64 使用base64編碼格式
-hex 使用hex編碼格式
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 生成的證書
?
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的ssl协议及开源实现openssl的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx上搭建https服务
- 下一篇: Linux C/C++ Openssl