http与https协议

HTTP协议是什么?
   简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。

HTTP协议能做什么?
    
很多人首先一定会想到:浏览网页。没错,浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。

HTTP协议如何工作?
大家都知道一般的通信流程:首先客户端发送一个请求(request)给服务器,服务器在接收到这个请求后将生成一个响应(response)返回给客户端。

什么是HTTPS:
 HTTPS(Secure
Hypertext Transfer
Protocol)安全超文本传输协议它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40
位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。

HTTPS传输协议原理

两种基本的加解密算法类型

1. 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等

2.非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等

HTTPS和HTTP的区别:
 https协议需要到ca申请证书,一般免费证书很少,需要交费。

http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。 http的连接很简单,是无状态的
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

HTTPS解决的问题:
 1 . 信任主机的问题.
采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 改证书只有用于对应的server
的时候,客户度才信任次主机. 所以目前所有的银行系统网站,关键部分应用都是https 的. 客户通过信任该证书,从而信任了该主机.
其实这样做效率很低,但是银行更侧重安全. 这一点对我们没有任何意义,我们的server ,采用的证书不管自己issue
还是从公众的地方issue, 客户端都是自己人,所以我们也就肯定信任该server.
 2 . 通讯过程中的数据的泄密和被窜改
    
1. 一般意义上的https, 就是 server 有一个证书.
    
a) 主要目的是保证server 就是他声称的server. 这个跟第一点一样. ( i.
具体讲,是客户端产生一个对称的密钥,通过server 的证书来交换密钥. 一般意义上的握手过程.)

b) 服务端和客户端之间的所有通讯,都是加密的.(ii. 加下来所有的信息往来就都是加密的.
第三方即使截获,也没有任何意义.因为他没有密钥,当然窜改也就没有什么意义了.)

2. 少许对客户端有要求的情况下,会要求客户端也必须有一个证书.
    
a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份.
应为个人证书一般来说上别人无法模拟的,所有这样能够更深的确认自己的身份.
    
b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘作为一个备份的载体. HTTPS 一定是繁琐的.
   
3. 传输效率的缺点

a) 本来简单的http协议,一个get一个response. 由https 要还密钥和确认加密算法的需要.单握手就需要6/7
个往返,任何应用中,过多的round trip 肯定影响性能.
    
 b) 接下来才是具体的http协议,每一次响应或者请求,
都要求客户端和服务端对会话的内容做加密/解密,尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL 芯片.
如果CPU 信能比较低的话,肯定会降低性能,从而不能serve 更多的请求.

SSL的简介:

SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet
Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise
Server、ColdFusion
Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5
以及RSA等加密算法,使用40
位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是SSL
over
HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。

如何选择HTTP 和 HTTPS
协议:

假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别,所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得。总之不需要用https
的地方,就尽量不要用。

时间: 2024-10-17 09:33:35

http与https协议的相关文章

HTTPS协议

原文出自:http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html HTTPS其实是有两部分组成:HTTP + SSL / TLS, 也就是在HTTP上又加了一层处理加密信息的模块.服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据 1. 客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口. 2. 服务端的配置 采用HTTPS协议的服

HTTPS协议在Tomcat中启用是如何配置的

版权声明:本文为博主阿甘(Gane_Cheng)原创文章,欢迎转载,传播知识,请留言告知并注明出处,方便文章有误改正之后能找到原文.个人之言,请抱着怀疑的态度参考! 目录(?)[+] 转载请注明出处: http://blog.csdn.net/gane_cheng/article/details/53001846 http://www.ganecheng.tech/blog/53001846.html (浏览效果更好) 本文将讲解HTTPS协议在Tomcat中启用是如何配置的. 概念简介 Tom

Https协议:SSL建立过程分析(也比较清楚,而且有OpenSSL的代码)

web访问的两种方式: http协议,我们一般情况下是通过它访问web,因为它不要求太多的安全机制,使用起来也简单,很多web站点也只支持这种方式下的访问. https协议(Hypertext Transfer Protocol over Secure Socket Layer),对于安全性要求比较高的情况,可以通过它访问web,比如工商银行https://www.icbc.com.cn/icbc/(当然也可以通过http协议访问,只是没那么安全了).其安全基础是SSL协议. SSL协议,当前版

iOS9要求网络使用HTTPS协议-解决办法

iOS9要求App内访问的网络必须使用HTTPS协议.原有的HTTP请求会报错,适配方法如下. 打开TARGETS-Build Phases, 添加New Run Script Phase,代码如下: # Add exception for Debug builds if [ "${CONFIGURATION}" == "Debug" ] then # Remove exception existing builds /usr/libexec/PlistBuddy

大型网站的 HTTPS 实践(1):HTTPS 协议和原理

转自:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. 2 HTTPS 协议概述 HTTPS 可以认为是 HTTP + TLS.HTTP 协议大家耳熟能详了,目前大部分 WEB 应用和网站都是使用 HTTP 协议传输的. TLS 是传输层加密协议,它的前身是 SSL 协议,最早由 ne

tomcat中http与https协议socket工厂

tomcat中http与https协议socket工厂,布布扣,bubuko.com

Fiddler抓取HTTPS协议

HTTPS协议握手过程: 1,客户端明文请求,把自己支持的非对称加密算法(用于使用CA证书公钥加密计算生成协商密钥的随机数per_master).对称加密算法(用于以后使用协商密钥加密传输内容).验证数据完整性的HASH算法.随机数Random_C发给服务器. 2,服务器发回客端的明文信息,包含选择一套加密算法.HASH算法.CA证书.随机数Random_S.CA证书中包含服务器地址.公钥.证书颁发机构信息和签名. 3,客户端做五件事: a)对证书合法性.证书中包含的地址与正在访问的地址是否一致

Loadrunner对https协议(单双向SSL)的web端性能测试

1.项目背景 1.1 单双向SSL的含义及部署 单向SSL即我们说到的https协议. 特点是,浏览器需要请求验证服务器证书: 基本含义是:一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版. 双向SSL顾名思义就是双方都需要验证证书的协议,浏览器首先向服务端请求证书,然后服务器端需要向浏览器请求目前登陆用户的个人证书验证. 1.2 系统的基本部署 单向SSL交互过程: 使用单向SSL时,仅通过虚拟主

iOS ASIHTTPRequest用https协议加密请求

iOS 终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略验证的话,程序也会报[error-9844]的错误,具体错误如下描述: [Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0x6aafa30 {NSUnderlyi

Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)

为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的openssl,它已经提供好了android的ndk makefile.git clone https://github.com/guardianproject/openssl-android.git然后直接cd到该目录,$NDK/ndk-build就行.注意默认的使用NDKr5b,如果没有该版本,请