【HTTPS】什么是SSL,HTTPS是如何工作的?

引言

我们大多数人每天都使用加密通信,你可能不知道,甚至从每关心它。如你用百度搜索东西,你在阿里巴巴上买了一件喜欢的衬衫,HTTPS能防止你的数据在网络传输过程中不被其他人窃取。

在本博客中,我们将介绍我们加密通信背后的知识,主要内容包括:为什么我们需要升级HTTP到HTTPS,HTTP的问题在哪里?TSL和SSL探讨,HTTPS是什么?HTTPS是如何工作的?从黑客的角度如何攻击HTTPS等。

在阅读本文之前,作者默认了你已经对称加密,非对称加密,摘要算法已经有所了解,如果实在没有基础也没关系,可以先读读这两篇预热下《【密码学】一万字带您走进密码学的世界(上)》,《【密码学】一万字带您走进密码学的世界(下)》

HTTP的问题在哪里?

如果你访问一个网站默认了超文本传输协议(HTTP),其内容将明文传输。这意味着每个人在你和服务器之间的位置都可以看到你与网站的每个交互内容。当用HTTP传输私人信息(姓名,电子邮件,家庭住址,信用卡详细信息等),黑客可以轻易的从网络流量中截取你发送信息,因为这些都是明文传输,下图使用fiddle2模拟的截取信息。

这种攻击方式就叫中间人攻击,当然因为这个衍生出来的还有缓存投毒,DDOS定向流向转发等,这些不是本文重点,这个中间人存在你的客户端和服务端的每个部分,例如,如果您连接到Wi-Fi热点,则您和服务器之间通过HTTP传输的所有内容将对热点中的每个参与者都可见。(是不是非常可怕,这也是不要轻易连接免费Wi-Fi的原因!!!)

用专业的术语总结一下HTTP的问题:
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
技术进步的一个源动力是解决问题,这个时候一种加密技术应运而生那就是SSL。

SSL探讨

SSL,英文全称Secure Sockets Layer,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)的技术,可确保数据在网络上的传输过程中不会被截取及窃听。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。下面我深入探讨下SSL
写到这里我毅然燃起了我对网景公司的情怀,其实网景公司不只发明了SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”

TSL和SSL的区别

我们来看看SSL的发明历史,你就明白区别啦

  • 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
  • 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
  • 1996年,SSL 3.0版问世,得到大规模应用。
  • 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
  • 2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。

很明显TLS就是SSL的升级版,那么它都升级哪些东西

  • 1 版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1。
  • 2 报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用了RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的是异或运算。但是两者的安全程度是相同的。
  • 3 伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。
  • 4 报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。
  • 5 密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。
  • 6 certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少许差别,但安全性相当。
  • 7 加密计算:TLS与SSLv3.0在计算主密值(master secret)时采用的方式不同。
  • 8 填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度要达到密文块长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。

总而言之一句话:TLS比SSL更加标准化,更加安全

HTTPS探讨

HTTPS 相当于是“HTTP over SSL”。举个简单的例子, SSL就像你家自来水管道外面的一个防护膜。

HTTPS是如何工作的

注意因为篇幅原因,此处所探讨的只是HTTPS单向鉴别的实现。比方说,你要连接到taobao.com。您在浏览器中键入地址,按回车并在毫秒内转到请求的网站。看起来很简单,对吧?但是实际上后台经过的数次的转发,我们在这里只讨论HTTPS建立单向连接的那部分。

具体的步骤如下:

  • 1.你的浏览器请服务器发送建立连接消息,消息中包含加密算法,是使用的协议等。
  • 2.服务器对你的浏览器回应一个消息,消息中包含证书信息,然后你可以对证书的真伪进行验证。
  • 3.验证通过之后,如果一切都按预期(即服务器已经成功验证),浏览器开始发送交换(和同意)应该用于此会话的随机密钥。
  • 4.服务器接收到到随机秘钥,然后开始进行数据交换。最终网页的内容安全地传输并显示在您的浏览器中。

可能你对上面的步骤依然存在疑惑,下面我们一起去解开它。首先证书是啥?其次证书如何校验真伪,在步骤3中,客户端像服务端发送的信息如何加密的?

电子证书是什么

假设你要和张三做生意,然后这个时候你不信任张三怎么办,你敢不敢贸然把货款打给他,答案肯定是否定的,这个找个信得过的中间人,有中间人开一份文件,有中间人李四的名义担保张三的人品信誉没问题,这个时候开的这个文件就叫证书(digital certificate)。
在上面的比喻中,你就是浏览器,张三就是服务器,中间人李四就是认证中心CA(Certificate Authority),上面说了CA必须是“信得过的,德高望重的”,并不是每家机构都够资格颁发证书的。国内目前有34家CA搜索,下面列举几个

  • 中国电信认证中心(CTCA)
  • 海关认证中心(SCCA)
  • 国家外贸部EDI中心建立的国富安CA安全认证中心
  • 广东电子商务认证中心(以后称广东CA)为首的“网证通”认证体系
  • SHECA(上海CA)为首的UCA协卡认证体系。

如果你是服务商,首先你要像认证中心申请,然后认证中心给你颁发(当然了是收费的,而且还有期限),一旦颁发成功,你的浏览器展示就是这样的

一些没有经过证书的网站,或者需要自己预装证书的网站

如何查看自己电脑上的证书?
1.windows 系统按 Win + R 键打开运行命令窗口,直接输入 certmgr.msc,就可以看到了,如下图所示:

2.也可以从浏览器中查看:工具->Internet选项->内容->证书

电子证书有哪些部分组成?

主体部分包括:

  • 版本号:指出该证书使用了哪种版本的X.509标准(版本1、版本2或是版本3),版本号会影响证书中的一些特定信息,目前的版本为3
  • 序列号: 标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符
  • 签名算法标识符: 用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密
  • 认证机构的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过
  • 认证机构: 证书颁发者的可识别名(DN),是签发该证书的实体唯一的CA的X.500名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)
  • 有效期限: 证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效
  • 主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的
  • 公钥信息: 包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数
  • 颁发者唯一标识符:标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项

扩展部分包括:

  • 发行者密钥标识符:证书所含密钥的唯一标识符,用来区分同一证书拥有者的多对密钥。
  • 密钥使用:一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:证书签名、数据加密等。如果某一证书将 KeyUsage 扩展标记为“极重要”,而且设置为“keyCertSign”,则在 SSL 通信期间该证书出现时将被拒绝,因为该证书扩展表示相关私钥应只用于签写证书,而不应该用于 SSL。
  • CRL分布点:指明CRL的分布地点
  • 私钥的使用期:指明证书中与公钥相联系的私钥的使用期限,它也有Not Before和Not After组成。若此项不存在时,公私钥的使用期是一样的。
  • 证书策略:由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关。
  • 策略映射:表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在
  • 主体别名:指出证书拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的。
  • 颁发者别名:指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段。
  • 主体目录属性:指出证书拥有者的一系列属性。可以使用这一项来传递访问控制信息。

例如我伯大的证书:

证书的信任链

最后的补充说明
1.浏览器对服务器的认证取决于两点:1,浏览器对中间人CA的信任(信任传递),2,服务器自身采用公私钥加密协议并对外公布公钥。
2.为什么建立连接之后开始使用随机对称秘钥加密?因为对称秘钥快!
3.为什么HTTPS的普及率不够高?1.因为HTTPS相比HTTP慢!2.因为CA的证书收费!

总结

本文主要阐述了HTTPS的工作原理,介绍了证书的相关概念,在后续的文章中,我会以实际的项目环境配置(如nginx如何配置HTTPS,Tomcat如何配置HTTPS等)来进行分析。

声明

本文35%为翻译组合,65%为原创

引用

https://www.emerchantpay.com/blog/articles/what-is-https-and-why-should-i-use-encryption
http://www.baike.com/wiki/SSL
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
http://blog.csdn.net/adrian169/article/details/9164385

时间: 2024-12-28 00:27:29

【HTTPS】什么是SSL,HTTPS是如何工作的?的相关文章

什么是https,和ssl什么关系,为什么用https

什么是https https is "Hyper Text Transfer Protocol" with Secure Sockets Layer (SSL) HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护. HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign.Microsoft等)(意即"我信任证书颁发机构告诉我应该信任的").因此,一个到某

非对称加密,数字签名,公钥私钥,Openssl,https,TLS/SSL等概念说明

本文将通过个人口吻介绍有关公钥私钥,Openssl,https,TLS/SSL等的一些概念及简单配置,在目前时间点(2017年5月7号)下,个人水平有限,存在不少知识理解不够深入,望见谅,后续有新的收获之后将会补充完善该博文. 关于http以及web等基础概念,欢迎看我的另一篇博文:"http,https,www,web等的区别含义" 博文链接地址:http://watchmen.blog.51cto.com/6091957/1922919 本文参考文献引用链接: 1.https://

配置Tomcat使用https协议(配置SSL协议)

内容概览: 如果希望 Tomcat 支持 Https,主要的工作是配置 SSL 协议 1.生成安全证书 2.配置tomcat --------------------------------------------------------------------------------------------------------------------------- 预备知识: sso cas ssl https ca ------------------------------------

在python使用SSL(HTTPS)

在python上使用SSL有许多场景,我主要关注的是使用python访问HTTPS资源,以及使用python提供HTTPS服务.(HTTPS是SSL在WEB上的应用之一) 一.使用python访问HTTPS网站 这应该算是最简单也是最常见的场景了.我们使用python做为客户端去访问公网上的网站,而这个网站为了传输安全(避免被劫持或者窃听)使用了HTTPS服务,传输过程内容都经过了SSL加密.下面来看下具体的python代码,这里使用的是python2.7.11,用的是python自带的urll

SSL&HTTPS简单介绍

这篇是最近看SSL和HTTPS的一个简单性总结,其中内容大部分都是参考网络上的内容,自己归纳整理了下. SSL介绍 HTTPS介绍 HTTP请求数据工作流程: l  用户在浏览器中输入网址,并告诉浏览器自己需要那些东西: l  浏览器解析网址,并将用户需要的东西记录成一张清单: l  浏览器发送信息给服务器,并附上清单,告诉服务器自己需要那些信息: l  服务器收到浏览器发送的信息,将对应的信息和清单返回回去: l  服务器发送信息给浏览器: l  浏览器拿到信息,并根据清单核对信息: l  将

https连接设置SSL协议和加密套件

https连接设置SSL协议(SSL Protocol)和加密套件(SSL Cipher suite) 作者:刚刚 版权所有 SSL(SecureSockets Layer 安全套接层),及其继任者传输层安全(TransportLayer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层对网络连接进行加密. Linux在安装了openssl以后,一般就会支持SSLv2(已经不安全,不建议使用).SSLv3.TLSv1(建议使用)这些安全传输协议.

记录一次给网站服务器添加SSL(https)的过程

都说现在的HTTPS更好,更安全,也给自己的网站添加了HTTPS.以此记录此过程. 访问http://andaily.com试试. -硬件环境 操作系统:   Ubuntu 12.04.1 LTS 服务器:       Apache Server 2.2.22 SSL证书:   沃通免费SSL证书G2  (申请地址https://buy.wosign.com/ApplyForSSL.html选择第一个免费SSL) -主要步骤 1.申请免费SSL后会去下载SSL证书,文件,Apache 的证书文件

Java调用使用SSL/HTTPS协议来传输的axis webservice服务

使用SSL/HTTPS协议来传输 Web服务也可以使用SSL作为传输协议.虽然JAX-RPC并没有强制规定是否使用SSL协议,但在tomcat 下使用HTTPS协议. 1.使用JDK自带的工具创建密匙库和信任库. 1)通过使用以下的命令来创建服务器端的密匙库: keytool -genkey -alias Server -keystore server.keystore -keyalg RSA 输入keystore密码: changeit 您的名字与姓氏是什么? [Unknown]: Serve

[转]配置Apache服务器支持https协议和SSL证书

建立网站时,特别是支付网站和电子商务网站,为了让客户信赖网站,让他们不把我们当做骗子,网站一般会安装SSL,我们访问网站时都是以https开头的,而不是以http开头的.下面是在windows环境下配置Apache服务器支持https协议和SSL证书. 1.配置Apache服务器支持openssl 配置Apache服务器支持https协议和SSL证书,最基本的要求是Apache包含openssl模块.在Windows下面单独安装openssl比较麻烦,最好还是安装那种绑定openssl的apac

Https系列之一:https的简单介绍及SSL证书的生成

Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http.https,基于spring boot四:https的SSL证书在Android端基于okhttp,Retrofit的使用 所有文章会优先在:微信公众号"颜家大少"中发布转载请标明出处 一:本文的主要内容介绍 https的介绍SSL证书的介绍自签名SSL证书介绍及生成方法CA证书介绍及申