HTTPS基本原理
HTTPS基本原理
Xcode7上,默认采用的传输协议就是HTTPS,大家都知道HTTPS = HTTP + SSL,利用HTTPS协议传输的数据是加密的,更加安全。在此对概念性知识不再介绍。直接介绍HTTPS工作的握手原理。
在网上找到了一个网友关于HTTPS工作的流程图,感觉不错,分享该大家。如下图:
接下来,笔者将对上图7个步骤逐一解释。
第一步:客户端的浏览器向服务器发送一个HTTPS请求,这个请求是连接到服务器的443端口,因为https默认采用的端口号是443。这一步客户端的客户端向服务器传送的还有客户端SSL 协议的版本号,加密算法的种类等等其他很多信息。
第二步:采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用证书颁发机构颁发的证书则不会弹出提示页面,但是证书颁发机构提供的证书是需要缴费的,一年大概两千多人民币的样子。据我所知,12306网站的证书就不是受信任的。
第三步:上一步申请或者自己制作的这套证书其实就是一对公钥和私钥。服务器把公钥包装在证书中返回给客户端。与此同时,服务器传送的还有SSL 协议的版本号,加密算法的种类等等信息。
第四步:这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,验证内容包括颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果公钥验证没有问题,客户端随机产生一个用于后面通讯的随机值,这里我们叫他“对称密码”,然后用服务器的公钥(服务器的公钥从步骤三中的服务器的证书中获得)对其加密。
第五步:然后将加密后的“对称密码”传给服务器。以后客户端和服务端的通信就是使用这个“对称密码”来进行加解密。
第六步:服务端得到客户端传过来的“对称密码”。使用私钥对这个对称密码进行解密。然后用这个“对称密码”对服务器需要发送给客户端的数据进行加密。
第七步:服务器把加密后的数据传递给客户端。因为“对称密码”是客户生成的,所以客户端可以用“对称密码”对服务器的数据进行解密得到真实的数据。
注意:因为Xcode7采用的安全传输层协议是1.2版本,即TLS1.2,所以即便某些服务器采用了HTTPS,但没有使用TLS1.2(比如仍然使用TLS1.0)也不能访问HTTPS服务器。所以,只有不能保证服务器使用的是不是TLS1.2时,我们需要修改项目中info.plist文件,具体修改请见笔者之前写过的文章:http://www.cnblogs.com/wsnb/p/4802023.html
HTTPS基本原理的更多相关文章
- 深入浅出HTTPS基本原理
基础知识准备:在了解HTTPS的基本原理之前,需要先了解如下的基本知识. 一.什么是HTTPS,TLS,SSL HTTPS,也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被 ...
- HTTPS静态服务搭建过程详解
HTTPS服务对于一个前端开发者来说是一个天天打招呼的老伙计了,但是之前我跟HTTPS打交道的场景一直是抓包,自己没有亲自搭建过HTTPS服务,对HTTPS的底层知识也是一知半解.最近正好遇到一个用户 ...
- 使用caddy实现非标准端口https
近来使用Halo搭建博客,并顺便把WeHalo小程序也把玩了起来,但是发现几个非常棘手的问题: 根据访问日志发现有三方在刷取关键接口的请求,http请求在部分情况下会暴露出很显著的安全问题: 小程序强 ...
- 系统安全-Man in the middleattack
窃听VS加密(解决数据机密性) 加密由两部分组成:算法&秘钥(算法要够复杂,秘钥要够安全) 对称加密:(Symmetric encryption) 采用单秘钥密码系统的加密方法,同一个秘钥可以 ...
- https的基本原理,看完你的程序员女朋友再也不和你提分手了
[http风险] 首先,我们来讲一下平时上网的时候,存在的风险. 初步接触过网络的同学都知道,网络上是很不安全的,尤其是各种公共场合的免费WIFI,以及手机上各种免费上网的万能钥匙.这些不安全因素会导 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- 动态令牌-(OTP,HOTP,TOTP)-基本原理
名词解释和基本介绍 OTP 是 One-Time Password的简写,表示一次性密码. HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性 ...
- ZooKeeper基本原理
ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1. ...
- 【腾许Bugly干货分享】“HTTPS”安全在哪里?
背景 最近基于兴趣学学习了下 HTTPS 相关的知识,在此记录下学习心得. 在上网获取信息的过程中,我们接触最多的信息加密传输方式也莫过于 HTTPS 了.每当访问一个站点,浏览器的地址栏中出现绿色图 ...
随机推荐
- wcf的诡异问题
最近在做工作流设计器用的silverlight 使用wcf服务. 过程中遇到了两个奇怪的问题. 1. 出现整型参数无法传递到服务器的情况 2.出现反序列化失败的情况. 经过仔细排查发现 每个属性都有一 ...
- Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- spring: 加载远程配置
通常在spring应用中,配置中的properties文件,都是打包在war包里的,部署规模较小,只有几台服务器时,这样并没有什么大问题.如果服务器多了,特别是集群部署时,如果要修改某一项配置,得重新 ...
- easyui 中Datagrid 控件在列较多且无数据时,列显示不全的解决方案
在onLoadSuccess 中加入如下代码就OK啦 $('#dg3').datagrid({ onLoadSuccess:function(data){ if(data.total==0){ var ...
- FineUI参考手册(离线版)现已免费提供下载!
http://fineui.com/bbs/forum.php?mod=viewthread&tid=3473
- web 前端常用组件【01】Pagination 分页
分页组件几乎是一般网站都会涉及到的组件,网上有很多这样的插件,自己挑来跳去选择了这一款. 官方Demo网址:http://mricle.com/JqueryPagination 功能强大,可扩展性比较 ...
- Android中的Semaphore
信号量,了解过操作系统的人都知道,信号量是用来做什么的··· 在Android中,已经提供了Semaphore来帮助我们使用~ 那么,在开发中这家伙有什么用呢? 用的地方不多,但是却真的是好用至极! ...
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...
- Docker部署SDN环境
2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...
- memcache 安装
1 下载两个文件 wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz wget http://www.monkey.org/ ...