一、HTTPS的安全性体现在哪
HTTP(超文本传输协议,Hyper Text Transfer Protocol)是我们浏览网站信息传输最广泛的一种协议。HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)相比HTTP增加了一个S,就是安全的(Secure),这个安全体现在什么地方呢?http中的信息是明文传输的,也就是说很容易被监听、截获和篡改;具体来说在http中常用的post和get方法,也是我们在网站上注册、登录帐号时要使用的请求方法,在网站页面不做保护处理的情况下,帐号密码这些信息都将明文的在网络中传输;对于我们浏览的页面内容,也都以字符串的形式被轻松的看到。
使用Fiddler软件,将自己手机连接代理,看看哪些网站或应用还在用http,还在传输着什么。
HTTPS则是在原有的应用层协议HTTP之下,传输层TCP之上,增加了安全套接字层(SSL),来实现信息的安全传输,提供了:
(1)数据加密: 传输的数据是经过加密的
(2)身份认证: 通过证书确认网站的真实性,在启用双向认证时,可确认用户的合法性
(3)内容完整性: 防止内容在传输过程中被篡改
 
二、HTTPS安全性的基础
HTTPS的安全性离不开SSL协议,理解SSL协议的实现离不开数字证书和非对称加密。这里不会详细介绍SSL协议的实现过程,而是让人能简单理解SSL如何利用数字证书,实现其数据加密和身份认证的功能。
 
对称加密
加密者和解密者共享密钥,加密者用共享密钥将明文变为密文,解密者用共享密钥将密文变为明文;一般相比非对称加密效率更高,但要求双方提前共享密钥。常见的有AES,DES等。
 
非对称加密
加解密需要密钥对实现,密钥对包括公钥(Public Key)和私钥(Private Key),将明文用公钥加密,私钥解密,或者用私钥加密,公钥解密。常见的有RSA ,ECC等。注意一般将公钥对外发布,大家都能获得,但私钥只有网站拥有者或特定的用户拥有;而且效率相比对称加密低,运算量大,时间更长。
 
数字摘要
是将任意长度的输入数据,经过单项哈希后,产生固定长度的输出数据。这么做的一个好处是能将大量的输入信息转换成较小的固定长度的信息。另外单项哈希保证了无法通过输出的摘要数据还原原始的输入数据;而且不同的输入几乎不可能产生相同的数字摘要。常见的摘要算法如SHA,MD5等。
注意的是网上常说的用MD5加密,那一般是不能解密的,因此不能算一种正常的加解密方法。
 
数字签名:
类似于手写签名,证明是经过你本人确认的,无法抵赖。具体就是利用私钥对原始信息的数字摘要进行加密形成数字签名,与原始信息一起发送给别人。对于接收信息的人,由于公钥能公开获取到,因此对收到的数字签名用公钥解密,再和收到的原始信息的数字摘要进行比对,就能确认是不是私钥的拥有者发送的内容,而且能确认中间有没有被人修改。
前面提到非对称加密的运算量大,时间长,因此数字签名都是对大量传输的信息产生数字摘要后进行加密。
 
数字证书
是一串身份信息按照指定的格式排列后,包含证书颁发机构进行数字签名的数据。常见的数字证书格式X.509 V3,存储到文件上一般一种为不含私钥的DER格式,以cer或者crt为文件后缀名,另一种为包含私钥的PKCS格式,以pfx或者p12为后缀。
数字证书中包括(不是全部):
(1)数字证书持有者身份信息 网站就包括所对应的URL或IP
(2)该证书拥有者对应的该证书公钥
(3)证书颁发者信息
(4)证书颁发者用私钥对证书持有者身份信息和公钥的签名 使用的摘要和签名算法
 
证书的验证:
1.两级证书:直接由权威或可信任(自己可设定是否信任)机构颁发给用户的证书
因此有权威机构一个证书(根证书),颁发给用户的一个证书
验证过程是使用颁发者的公钥,采用要验证的证书(后面称用户证书)中说明的签名算法,解密签名,对比根据用户证书上的持有者信息等计算出的数字摘要,看是否一致。
换种描述的说法:
(1)用户证书里有:
a.用户信息UInfo
b.签名用到的摘要算法H,和加解密算法S
c.用颁发者私钥签名的用户信息摘要S(H(UInfo)) (就是用户信息数字摘要H(UInfo),按一定格式编码后,私钥加密后获得S(H(UInfo)) )
d.颁发者信息
(2)验证用户证书
a.根据用户证书里的颁发者信息找到颁发者证书,获取颁发者公钥;
b.再用用户证书里说明的加解密算法S解密签名S(H(UInfo)) ,得到H(UInfo)'
c.根据用户证书中的摘要算法H,自己重新计算用户信息摘要,得到H(UInfo)
d.对比两次的计算结果H(UInfo)'和H(UInfo),如果相同则验证通过。
(3)颁发者证书的验证
需要在电脑预置或自己安装根证书,也就是颁发者的证书,作为认证的起点。
2.证书链的验证
首先证书颁发机构(CA)的根证书,可以签发子CA的证书,CA和子CA都可以审核注册者信息,然后为用户颁发证书。那么从CA到子CA,再到用户证书,构成了证书链。他的验证可以仿照两级证书的验证,一步步往上追,直到用户自己安装的根证书
 
现在再来看HTTPS中SSL保障安全传输的简单流程:
(1)首先用户在浏览器中发起HTTPS连接请求时,先从网站(服务端)获取了其证书;
(2)浏览器验证了网站证书有效性后,再对比证书中的URL或IP信息和实际访问的URL或IP是否一致;
(3)都正确后再利用证书中的公钥信息,建立安全的信息传输通道;(简单来说,浏览器可以用公钥加密一个共享密钥给服务端,因为只有服务端有私钥。详细的SSL连接建立流程比这里复杂的多,但基本原理类似)
(4)如果客户端将自己的证书发给网站,网站也可以确认用户的合法性
 
最后说明下HTTPS带来的性能和流量的损失。首次访问网站(服务端),建立SSL链接,客户端需要获取服务端的证书链,验证证书的有效性。这里证书链一般情况下就至少两个证书1K多的数据量,而如果没设置HTTP长连接,那么会导致每次访问请求都会产生握手连接过程,都会大的流泪消耗。好消息是目前一般的Android网络开发库,采用HTTP1.1,默认开启了Keep-Alive设置,但是要注意平衡好超时时长。

通俗的理解HTTPS以及SSL中的证书验证的更多相关文章

  1. HTTPS、SSL与数字证书介绍

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 HTTPS:在HTTP(超文本传输协议)基础上提出的一种安全 ...

  2. AFNetWorking https请求 SSL认证 自制证书

    1.服务器会给一个证书,一般为.pem格式证书 2.将.pem格式的证书转换成.cer格式的证书 打开电脑自带终端 ,进入到桌面  cd Desktop 回车回到桌面Desktop Admin$ 输入 ...

  3. 深入理解Https如何保证通信安全

    作为一名ABC搬运工,我相信很多人都知道Https,也都知道它是用来保证通信安全的,但是如果你没有深入了解过Https,可能并不知道它是如何保证通信安全的.我也是借着这次机会,和大家分享下我深入了解的 ...

  4. [整理]HTTPS和SSL证书

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: • https:在http(超 ...

  5. 简单地理解HTTPS 转

    原文地址:http://www.nowamagic.net/librarys/veda/detail/2394 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等 ...

  6. 怎样用第三方开源免费软件portecle从https站点上导出SSL的CA证书?

    在我这篇文章中.我提到了怎样用OpenSSL从https站点上导出SSL的CA证书?  这样的方式不太直观,且须要用户自己手工拷贝.然后另存为文件,那么有没有更好更方便的工具呢? 幸运的是,有热心于开 ...

  7. 通俗理解数字签名,ssl数字证书和https

    前言 最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应.签章有法律效应必须满足两个条件: 能够证明签名,盖章者是谁,无法抵赖 PDF合同在签章后不 ...

  8. 你的MySQL服务器开启SSL了吗?SSL在https和MySQL中的原理思考

    最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...

  9. 理解https中的安全及其实现原理

    Google的一份网络上的 HTTPS 加密透明报告(数据截至2022年1月)中指出HTTPS 连接的普及率在过去几年激增,互联网上排名前 100 位的非 Google 网站HTTPS 使用情况为:9 ...

随机推荐

  1. 正确理解java编译时,运行时以及构建时这三个概念

    Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个pers ...

  2. mormot当作内存数据库(缓存)使用

    mormot当作内存数据库(缓存)使用 mormot的TSQLRestStorageInMemory可以作为内存数据库来使用. 上图是在笔者4代I5笔记本上做的测试,增加10万记录,耗时:562毫秒. ...

  3. arcgis python添加几何属性

    import arcpy import numpy import math def AddGeometryAttributes(fc, geomProperties, lUnit, aUnit, cs ...

  4. 【微信小程序】处理时间格式,时间戳转化展示时间格式问题,调用外部js的默认方法function的问题

    默认的 小程序中new Date()显示的时间是这样的: 格式化时间的显示怎么做: 小程序的根目录下util目录下默认有一个util.js文件 其中util.js文件内容是: //数据转化 funct ...

  5. 什么是软件project?

    Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNo ...

  6. oracle 日期相减 转载

      转自 http://hi.baidu.com/juanjuan_66/blog/item/cf48554c9331fbe6d62afc6a.html oracle日期相减2012-02-10 12 ...

  7. [Swift] Swift3.0--GCD

    reference to : http://www.jianshu.com/p/4c983388dca6 估计现在好多人在为这一块头疼,所以先来点干货. //最常用模板 //全局队列异步执行 Disp ...

  8. Python处理PDF及生成多层PDF

    Python提供了众多的PDF支持库,本文是在Python3环境下,试用了两个库来完成PDF的生成的功能.PyPDF对于读取PDF支持较好,但是没找到生成多层PDF的方法.Reportlab看起来更成 ...

  9. Ubuntu 将应用程序固定到快速启动栏

    Ubuntu上没有快捷方式的说法,而通过软件中心安装的软件就有图标,并能加入到启动器上,这是因为它们有一个desktop配置文件的缘故.这些配置文件在/usr/share/applications这个 ...

  10. 定义和使用EL函数

    EL为表达式语言,在EL中,允许定义和使用函数.下面将介绍如何定义和使用EL的函数. 1. 定义和使用函数 函数的定义和使用分为以下3个步骤: (1)编写一个Java类,并在该类中编写公用的静态方法, ...