一、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. 使用EF Model First创建edmx模型,数据库有数据的情况下,如何同时更新模型和数据库

    使用"EF Model First",我们可以很直观地在edmx文件中创建数据模型,并根据模型生成数据库,整个过程快速而高效.可当数据库中有了一定的数据量,同时,可能需要对模型中字 ...

  2. ubuntu C++开发环境

    最近在VM中装了Ubuntu,为了开发程序,于是在网上找了些由于C/C++开发环境搭建的资料,供大家参考. 以下文字主要讲如何搭建Code::Blocks+wxWidgets. 搭建步骤: 1.安装编 ...

  3. select case when if 的一些用法

    概述:sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让我们看一下CASE的语法.在一般的SELECT中,其 ...

  4. CRF 及CRF++ 安装与解释

    CRF简介 Conditional Random Field:条件随机场,一种机器学习技术(模型) CRF由John Lafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有 ...

  5. C++11学习

    转自: https://www.cnblogs.com/llguanli/p/8732481.html Boost教程: http://zh.highscore.de/cpp/boost/ 本章目的: ...

  6. xp局域网共享设置

    xp在局域网内的每一台机子做以下一些设置:1.启用Guest(来宾)帐户:控制面板--用户帐户或者在管理工具--计算机管理--本地用户和组--右键Guest属性--去掉帐户已停用 前的勾.2.允许Gu ...

  7. 最大熵,熵,MLE的解释,还行

    这篇文章: https://blog.csdn.net/jiaoyangwm/article/details/81276921

  8. C# WinForm开发系列 - GDI+【转】

    http://blog.csdn.net/blue_sky6/article/details/53811435?locationNum=6&fps=1 C# WinForm开发系列 - GDI ...

  9. C#读写txt文件的两种方法介绍[转]

    C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...

  10. 眼前一亮!十八款新潮而又独特的网站Header设计

    一个网站最重要的一个部分就是标题.这将是访问者的第一印象,设计出一个吸引眼球并且功能清晰导航还是比较容易的,但想出一个独特的header却总是困难的,这就是为什么我决定把那些对我有最影响的导航列出来了 ...