今天看到所在的某个开发群问https原理,之前做HTTPS ,下面简单说下原理.希望能帮助你理解.

HTTPS从最终的数据解析的角度,与HTTP相同。HTTPS将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全;而对于接收端,在SSL/TSL将接收的数据包解密之后,将数据传给HTTP协议层。

SSL/TSL包括四次握手,主要交换三个信息:

  1. 数字证书;
  2. 三个随机数;
  3. 加密通讯协议。

其通讯过程如下示意图:

数字证书

该证书一般是由服务器发给客户端,接收方通过验证这个证书是不是由信赖的CA签发,或者与本地的证书相对比,来判断证书是否可信;假如需要双向验证,则服务器和客户端都需要发送数字证书给对方验证。
数字证书的生成是分层级的,从叶节点证书往根证书层层验证(有效期、签名等等),遇到根证书时,发现作为可信锚点的它存在与可信证书列表中,那么验证就通过。例如在钥匙串中可以看到某券商公司申请的证书没有在系统可信任的证书列表中。

下面以某浪sdk里的证书为代表简单说明一下数字证书的内容:

证书字段 证书说明
签发者名称 发布并签署该证书的实体的信息
序列号 数字证书机构(Certificate Authority, CA)给证书的唯一整数,一个数字证书一个序列号
主题名称 用于识别该数字证书的信息
公共密钥信息 可公开的密钥信息
签名 通过签名算法计算证书内容后得到的数据,用于验证证书是否被篡改

三个随机数

这三个随机数构成了后续通信过程中用来对数据进行对称加密解密的“对话密钥”。首先客户端先发第一个随机数n1,然后服务器返回第二个随机数n2(这个过程同时把数字证书发给客户端),这两个随机数都是明文的;而第三个随机数n3,客户端用数字证书的公钥进行非对称加密,发给服务器;而服务器用只有自己知道的私钥来解密,获取第三个随机数。服务端和客户端都有了三个随机数n1+n2+n3后,两端就使用这三个随机数来生成“对话密钥”,在此之后的通信就使用这个“对话密钥”来进行对称加解密。

加密通信协议

双方商量具体使用哪一种加密方式,假如两者支持的加密方式不匹配,则无法进行通信。因为这个过程中,服务端的私钥只用来解密第三个随机数,从来没有在网络中传输过,只要私钥没有被泄露,那么数据就是安全的。

iOS对HTTPS证书链的验证原理的更多相关文章

  1. iOS 对 HTTPS 证书链的验证

    HTTPS从最终的数据解析的角度,与HTTP相同.HTTPS将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全:而对于接收端,在SSL/TSL ...

  2. iOS 中对 HTTPS 证书链的验证

    这篇文章是我一边学习证书验证一边记录的内容,稍微整理了下,共扯了三部分内容: HTTPS 简要原理: 数字证书的内容.生成及验证: iOS 上对证书链的验证. HTTPS 概要 HTTPS 是运行在 ...

  3. 【腾讯Bugly干货分享】iOS 中 HTTPS 证书验证浅析

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/-fLLTtip509K6pNOTkflPQ 导语 本 ...

  4. HTTPS 协议降级攻击原理

    0x00 HTTPS 在传统流行的web服务中,由于http协议没有对数据包进行加密,导致http协议下的网络包是明文传输,所以只要攻击者拦截到http协议下的数据包,就能直接窥探这些网络包的数据. ...

  5. iOS开发HTTPS实现之信任SSL证书和自签名证书

    iOS开发HTTPS实现之信任SSL证书和自签名证书 转自:http://www.jianshu.com/p/6b9c8bd5005a/comments/5539345 (收录一下供自己学习用的) 字 ...

  6. Django中csrf token验证原理

    我多年没维护的博客园,有一篇初学Django时的笔记,记录了关于django-csrftoekn使用笔记,当时几乎是照抄官网的使用示例,后来工作全是用的flask.博客园也没有维护.直到我的博客收到了 ...

  7. Django中csrf_token验证原理

    我多年没维护的博客园,有一篇初学Django时的笔记,记录了关于django-csrftoekn使用笔记,当时几乎是照抄官网的使用示例,后来工作全是用的flask.博客园也没有维护.直到我的博客收到了 ...

  8. 案例分享-https证书链不完整导致请求失败

    背景 话不多说,直接上堆栈 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX p ...

  9. 使用HttpClient连接池进行https单双向验证

    https单双向验证环境的搭建参见:http://www.cnblogs.com/YDDMAX/p/5368404.html 一.单向握手 示例程序: package com.ydd.study.he ...

随机推荐

  1. 让黑白的SecureCRT彩色起来

    让黑白的SecureCRT彩色起来,如图仿真设置如下:  

  2. mysql sql语句高级写法

    将user表的内容,插入到team_member表INSERT INTO team_member (Nike,HeadImageUrl) SELECT Nike,HeadImageUrl FROM u ...

  3. MDI窗体及涉及到的相关问题

    MDI窗体是个什么东东尼?多文档窗体唠,相对的还有个SDI,就是单文档窗体.一般情况下我们会将软件的主窗体设置为MDI窗体.那么在主窗体的菜单部分调出来的其他窗体就是主窗体的子窗体了. (1)在主窗体 ...

  4. java实现MsOffice文档向pdf文档转化

    本篇文档实现功能,将word和ppt文档的文件转化成pdf格式的文档 应用到jacob 第一步:下载压缩包 (1)jacob官网下载jacob压缩包 (2)网址:http://sourceforge. ...

  5. vue+webpack多个项目共用组件动态打包单个项目

    原文复制:https://www.jianshu.com/p/fa19a07b1496 修改了一些东西,因为sh脚本不能再window电脑执行,所以改成了node脚本.这是基于vue-cli2.0配置 ...

  6. WiFi密码破解详细图文教程

    每天都能看到有不少网友在回复论坛之前发布的一篇破解WiFi密码的帖子,并伴随各种疑问.今天流云就为大家准备一篇实战型的文章吧,详细图文从思维CDlinux U盘启动到中文设置,如何进行路由SSID扫描 ...

  7. windows上如何安装Sqlite

    一.安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Windows下的包下载下来sqlite-dll-win ...

  8. 移植SDL2.2问题及解决方法

    项目需要ffmpeg+SDL播放视频,所以不得不移植SDL 根据 <移植SDL最新版本>http://blog.csdn.net/flyyang123456789/article/deta ...

  9. sublime Text 3安装sublimecodeIntel插件

    下载:https://github.com/SublimeCodeIntel/SublimeCodeIntel   解压到:  data/pacakges目录 安装 Package Control插件 ...

  10. 黄聪:js 获取浏览器、Body、滚动条、可见区域、页面、边框、窗口高度和宽度值(多浏览器)

    IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度document.docu ...