ssl协议及开源实现openssl

ssl协议及开源实现opensslssl协议SSL:(SecureSocketLayer)安全套接层,ssl是一套安全协议,被应用层调用,当http调用ssl协议时被称为https,当ftp调用ssl协议时被称为sftp。lls是一个协议的集合,其中包括:Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换ChangeCipherSpec协议:一条消息表明握手协议已

大家好,又见面了,我是你们的朋友全栈君。

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

分层设计

  1. 最底层:基础算法原语的实现,aes,rsa,md5
  2. 向上一层,各种算法的实现;
  3. 再向上一层:组合算方法实现的半成品;
  4. 用各种组件拼装而成的各种成品密码学协议软件;

通信流程

ssl通信的两个阶段:
两阶段协议,分为握手阶段和应用阶段
握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。 后续通信使用的所有密钥都是通过MasterSecret生成。
应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信

https的通信流程:

客户端向服务端发起请求,服务端将自己的证书发送给客户端,
客户端个使用内置于系统中的ca的公钥进行解密,解密成功即表示ca是合法的。
如果有需要客户端将自己的证书发送给服务端
客户端生成一个自己的对称密钥,使用服务端的公钥进行加密。发送给服务端。
服务端使用自己的私钥解密收到的加密过的对称密钥,
双方使用对称密钥进行通信,(http协议调用ssl协议对自身的数据进行密钥加密,被加密的http数据为二进制)

ssl协议的开源实现:OpenSSL

ssl作为协议出现,协议是被具体定义的概念,openssl时ssl的具体的实现,openssl也是一套开源的软件。
openssl包括三方面的组件:
openssl: 多用途的命令行工具,包openssl
libcrypto: 加密算法库,包openssl-libs
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 714 18:21 /etc/passwd
-rw-r--r--  1 root root 4542 716 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=
genrsa 生成私钥(仅生成私钥,公钥是从私钥中提取出来的)
-out 生成的密钥文件
-des 使用对称密钥对生成的非对称秘钥文件加密(可选参数)
格式 openssl genrsa -out 文件 -des 非对称秘钥密钥长度(多少位)
生成非对称密钥
openssl  genrsa -out /root/haha.key
Generating RSA private key, 1024 bit long modulus
..................................++++++
..................++++++
e is 65537 (0x10001)
指定使用对称密钥对生成的密钥文件加密加密
# openssl genrsa -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 716 17:39 jinbus.key

rsa 显示密钥
-in 获取公钥的私钥文件
-pubout从私钥中获取公钥
-out 保存获取的公钥的文件

例:
查看文件中的私钥
# openssl rsa -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 生成的证书

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143804.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 固态硬盘损坏 数据恢复_固态硬盘如何恢复数据

    固态硬盘损坏 数据恢复_固态硬盘如何恢复数据先在没有专业技术和维修经验的前提下,切勿自己动手去修复硬盘,操作不当极易对硬盘固件造成二次损坏,带来数据丢失的严重后果!有送修硬盘的客户,由于在小电脑店或者小作坊修过硬盘,失败后才拿到正规渠道做数据恢复,结果还是失败,正是因为一些不正确的操作对受损硬盘进行了二次或者多次损坏,导致数据恢复提取失败!所以,遇到硬盘故障问题,一定要送修专业机构进行数据恢复。专业级我们把常见的固态硬盘损坏概括为硬件损坏(电路板和主控)和固件损坏。1.硬件损坏如果是硬件损坏,可以通过更换电路板和主控来恢复硬盘

  • SCOM警报通知新特性:即时消息通知

    SCOM警报通知新特性:即时消息通知

  • vue-router 中 meta的用法

    vue-router 中 meta的用法如果我想做下面这个功能:路由代码:用这个获取

  • win10修改视频默认播放器_win10无法更改默认播放器

    win10修改视频默认播放器_win10无法更改默认播放器你要用到WindowsPowerShell,它是win10系统自带的一个应用,要打开它,就单击开始菜单中的“所有应用”,然后找到WindowsPowerShell的文件夹,右键单击WindowsPowerShell(注意不是WindowsPowerShellISE),然后单击以管理员身份运行,就打开了。输入以下:get-appxpackage*zunevideo*|r

  • bat批量删除空文件夹_如何建立bat文件夹

    bat批量删除空文件夹_如何建立bat文件夹@echooff&title清理空目录set/pPan=请输入要清理文件夹,回车确认:cls&echo即将开始清理。。。&ping0-n"3">nulcd/d%Pan%for/f"delims="%%ain(‘dir/ad/s/b’)do(dir/a-d/s/b"%%~a\*">nul2>nul..

  • MyEclipse SVN插件的两种安装方法

    MyEclipse SVN插件的两种安装方法MyEclipse的功能十分强大,MyEclipse这款软件是在Eclipse的基础上加上自己的插件开发而成的企业级集成开发环境,在日常的工作中,主要用于Java、JavaEE以及一些移动应用的开发,同时MyEclipse还支持很多插件,接下来就教大家如何安装SVN插件。  在线安装  1、打开myeclipse,help—》MyEclipseConfiguration

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号