SSL及其加密通信过程

一、什么是SSL

SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密。它主要是分为两层:

  • SSL记录协议:为高层协议提供安全封装、压缩、加密等基本功能
  • SSL握手协议:用于在数据传输开始前进行通信双方的身份验证、加密算法的协商、交换密钥
    OpenSSL是SSL的开源实现,它是作为密码学的安全开发包,提供相当强大全面的功能,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。它一共提供了8中对称加密算法和4中非对称加密算法。

二、HTTPS和SSL

HTTP(Hyper TEXT Transfer Protocol超文本传输协议)是目前互联网上应用最为广泛的一种网络协议,用于在Web浏览器和网站服务器之间传递信息,但是HTTP协议以明文的方式发送内容,不提供任何数据加密,攻击者能够很轻易通过抓包的方式截取传输内容并读懂其中的信息,所以HTTP不适合传输一些比较私密的信息,为了解决HTTP这一缺陷,HTTPS(Hyper TEXT Transfer Protocol over Secure Socket Layer)协议出现。HTTPS是在HTTP的基础上加入SSL协议。传输以密文传输,保证数据传输的安全以及确认网站的真实性(数字证书)。

HTTPS=HTTP+SSL

三、SSL加密方式

3.1 对称加密与非对称加密

在开始之前首先得对理解对称加密与非对称加密这两种加密方式。其中加密过程是

信息+密钥+算法=密文

3.1.1对称加密

对称加密实质加密和解密都使用同一个密钥,对称加密只有一个密钥,作为私钥。这就好比现实生活中的钥匙和锁,我将想要传达的信息通过对称加密算法用私钥进行加密,形成密文,然后将这密文传送给同样拥有这把锁的“钥匙”的人,对方就用同样的算法和私钥将密文解密出来。
常用的对称加密算法有DES和AES等
但是在现实中,这种传输方式并不是特别方便,密钥怎么给对方是一个很关键的问题,而且密钥交给了其他人自己也不是很放心。于是非对称加密出现

3.1.2非对称加密

非对称加密是指加密和解密用的是不同密钥,并且是成对存在的。一把称为公钥,能够放心的交给别人,一把是私钥,只能自己保存。其中用公钥加密的信息只能用私钥解密,用私钥加密的信息只能用公钥解密。
在这里插入图片描述
需要注意的是这里的私钥和密钥都是对应的,就是说我的私钥可以解密用我的公钥加密的信息,但是他人的私钥不能解密用我的公钥加密的信息。
常用的非对称加密算法有:RSA,DH,DSA三种

3.2 具体的加密过程

我通过一段具体的通信过程来模拟这一加密过程。假设主人公是客户端A和服务端B

A:B,你好,我想向你发一段消息,请你把你的公钥给我
B:好的,我的公钥是:xxxxxxx。
A:好的,我收到了你的公钥,我给你发送的消息经过你的公钥加密后是:yyyyyyy。
B:收到,我现在用我的密钥来解密看看。

这就是非对称加密的具体过程,这种方式看上去很安全,但是仔细想想信息真的可靠吗?
想一想客户端A的公钥是假的怎么办?如果有一个黑客C也给客户端A发送了一个自己的公钥,而客户端A不知道公钥的正确性,用了C的公钥加密发送,这样一来,信息被C截取的化,信息不久泄露了吗。
所以我们得想个办法证明我用的公钥确实是服务端B的公钥。
于是数字证书出现!
我先抛一段官方的数字证书的概念

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。

简单来说数字证书就是一段信息,他内部的信息包括:

  • 签发证书的机构
  • 加密算法
  • Hash算法
  • 公钥
  • 证书到期时间等

贴一段实际的数字证书
我通过查看CSDN的数字证书来帮助理解这一概念,chrome的网页栏一般有“安全”的字样,说明该网站的有数字证书的,数据传输的安全性是可以保证的。
在这里插入图片描述
再来看看数字证书的内容
在这里插入图片描述
它里面包含了一系列安全相关信息,在下面我会讲这些信息的用途。
另外提一点,数字证书是由权威机构——CA机构发行,我们是绝对信任这个机构的。

为了防止证书颁发的过程中被人修改,又出现了一个数字签名的概念,所谓数字签名就是把证书内容做了一个hash操作生成固定长度的数据发送给服务端B,服务端就能通过自己hash一遍对比发过来的hash来判断内容是否被修改。然而这还是可能被人截取修改内容重新生成hash再发给服务端B,这怎么办呢?出于这个考虑,CA机构在颁发时又会用一个私钥将这个hash加密,这样就防止了证书被修改了。
我将该过程图示
在这里插入图片描述
这里再说一下数字签名,通俗来说就是将要传输的信息通过hash加密后将这个hash用私钥加密,最后得到的东西称之为数字签名。用来验证传输的信息是否被更改,注意的是这个私钥是CA官方私钥。
所以最终传送的内容有

正文+数字签名+数字证书

我们梳理一下

  1. 第一步 :客户端A开启一个新的浏览器访问客户端时,会先让A安装一个数字证书,这个证书主要包含的是CA机构的公钥。
  2. 第二步:服务端B发来CA机构给自己的证书,通过CA公钥解密被CA私钥加密的hash1,然后再用B的证书里面的hash算法将信息生成一个hash2,通过比较两个hash,若相等,确认这个数字证书是服务端B的。

由于非对称加密算法复杂度和计算量大,对称加密效率高,SSL就将这两种加密算法混合着用,这样安全和效率就都能保证了。其中具体的过程如下:

  1. 第一步 客户端A给出 支持的SSL版本+一个随机数+自己支持的加密方式
  2. 第二步 服务端B接收到这些信息后确认加密方式+自己的安全证书+一个随机数发给A
  3. 第三步 客户端A确认数字证书有效性(验证方法上面已经说明),然后生成一个随机数,并将这个随机数用B的数字证书公钥加密后发送给A。
  4. 第四步 服务端B使用自己的私钥解密这个随机数
  5. 第五步 A和B通过第二步确定的加密方法将前三个随机数生成一个对话密钥 用来接下来的通信(个人感觉不需要三个随机数,只用最后一个就够了,这样做可能是为了更安全)

于是A和B救恩那个用对称加密的方式快速有效安全的通信了。
这就是SSL协议的握手过程,图示如下。
在这里插入图片描述

四、总结


本文由https引出SSL,并探讨对称和非对称加密以及数字签名和数字证书的原理,最后介绍SSL具体加密通信过程。若有错误或者改进之处欢迎指正,不胜感激。

  • 45
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
先运行safechat包里的greetigserver.class,之后运行greetingclient.class即可。 如遇报错,请参考:https://blog.csdn.net/fengzun_yi/article/details/104497160 实现过程: 1. 采用TCP通信协议完成接收者发送者双方的消息传递。 2. 利用Diffie-Hellman密钥交换协议生成对称加密通信通信密钥。 3. 为防止中间人攻击,采用RSA非对称加密算法协助DH算法完成密钥交换。具体过程如下: a. 接收者与发送者双方各自利用RSA算法生成自己的公私钥,并生成数字证书,并在一个CA进行认证。 b. 在DH密钥交换阶段,A生成A的DH协商密钥用于发送给B,该密钥与接收方私钥生成最终通信密钥。发送DH密钥时,A先用自己的私钥加密DH协商密钥,再去CA获得一个真实的B的公钥,用B的公钥对加密过的协商密钥再做一次加密,发送给B。(因为是用B的公钥加密过,只有B有B的私钥,所以接收信息只有B自己可以解密查看,又因为是用A的私钥加密过的,只有A有A的私钥,所以只有用A的公钥可以进行解密,所以可以保证协商密钥确实是A发送过来的,而且发送的信息也无法被中间人解密。)B收到信息之后,先用自己的私钥解密,然后去CA获得A的公钥再对消息解密一次,获得A的DH密钥。B发给A的过程同上。 c. 之后双方执行DH生成本地密钥的过程。A利用B发送过来的密钥和A的DH私钥生成通信密钥。B利用A发送过来的密钥和B的DH私钥生成通信密钥。根据DH原理,两者生成的通信密钥是相同的。 4. 利用上一步生成的通信密钥,采用AES对称加密算法进行加密通信。 为了方便起见,并没用对A和B双方进行颁发证书的操作,A的公钥默认B已经从CA获得,B的公钥默认A已经从CA获得。并且采用java控制台交互,仅仅为演示原理及简单效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值