HTTPS协议简介

下面我们来一起学习一下 HTTPS ,首先问你一个问题,为什么有了

HTTP 之后,还需要有 HTTPS ?我突然有个想法,为什么我们面试的时候需要回答标准答案呢?为什么我们不说出我们自己的想法和见解,却要记住一

些所谓的标准回答呢?技术还有正确与否吗?

HTTPS 为什么会出现

一个新技术的出现必定是为了解决某种问题的,那么 HTTPS 解决了

HTTP 的什么问题呢?

HTTPS 解决了什么问题

一个简单的回答可能会是HTTP 它不安全。由于 HTTP 天生明文传输的特性,在 HTTP 的传输过程中,任何人都有可能从中截获、修改或者伪造请求发送,所以可以认为 HTTP 是不安全的;在 HTTP 的传输过程中不会验证通信方的身份,因此 HTTP 信息交换的双方可能会遭到伪装,也就是没有用户验证;在 HTTP 的传输过程中,接收方和发送方并不会验证报文的完整性,综上,为了解决上述问题,HTTPS 应用而生。

什么是 HTTPS

你还记得 HTTP 是怎么定义的吗?HTTP 是一种超文本传输协议(Hypertext Transfer Protocol) 协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范,那么我们看一下 HTTPS 是如何定义的HTTPS 的全称是Hypertext Transfer Protocol Secure,它用来在计算机网络上的两个端系统之间进行安全的交

换信息(secure communication),它相当于在 HTTP 的基础上加了一

个Secure 安全的词眼,那么我们可以给出一个 HTTPS 的定义:HTTPS 是一个在计算机世界里专门在两点之间安全的传输文字、图片、音频、视频等超文本数据的约定和规范。HTTPS 是 HTTP 协议的一种扩展,它本身并不保传输的证安全性,那么谁来保证安全性呢?在 HTTPS 中,使用传输层安全性(TLS)或安全套接字层(SSL)对通信协议进行加密。也就是 HTTP +

SSL(TLS) = HTTPS。

HTTPS 做了什么

HTTPS 协议提供了三个关键的指标

?加密(Encryption), HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。

?数据一致性(Data integrity),数据在传输的过程中不会被窃听者所修改,用户发送的数据会完整的传输到服务端,保证用户发的是什么,服务器接收的就是什么。

?身份认证(Authentication),是指确认对方的真实身份,也就是证明你是你(可以比作人脸识别),它可以防止中间人攻击并建立用户信任。

有了上面三个关键指标的保证,用户就可以和服务器进行安全的交换信息了。

那么,既然你说了 HTTPS 的种种好处,那么我怎么知道网站是用 HTTPS 的还是 HTTP 的呢?给你两幅图应该就可以解释了。

HTTPS 协议其实非常简单,RFC 文档很小,只有短短的 7 页,里面规定了新的协议名,默认端口号443,至于其他的应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP,没有任何新的东西。

也就是说,除了协议名称和默认端口号外(HTTP 默认端口 80),HTTPS 协议在语法、语义上和 HTTP 一样,HTTP 有的,HTTPS 也照单全收。

那么,HTTPS 如何做到 HTTP 所不能做到的安全性呢?关键在于这

个S 也就是SSL/TLS 。

什么是 SSL/TLS

认识 SSL/TLS

TLS(Transport Layer Security) 是SSL(Secure Socket Layer) 的后续版本,它们是用于在互联网两台计算机之间用于身份验证和加密的一种协议。注意:在互联网中,很多名称都可以进行互换。

我们都知道一些在线业务(比如在线支付)最重要的一个步骤是创建一个值得信赖的交易环境,能够让客户安心的进行交易,SSL/TLS 就保证了这一点,SSL/TLS 通过将称为X.509 证书的数字文档将网站和公司的实体信息绑定到加密密钥来进行工作。每一个密钥对(key pairs) 都有一

个私有密钥(private key) 和公有密钥(public key),私有密钥是独有的,一般位于服务器上,用于解密由公共密钥加密过的信息;公有密钥是公有的,与服务器进行交互的每个人都可以持有公有密钥,用公钥加密的信息只能由私有密钥来解密。

什么是X.509:X.509 是公开密钥证书的标准格式,这个文档将加密密钥与(个人或组织)进行安全的关联。X.509 主要应用如下

?SSL/TLS 和 HTTPS 用于经过身份验证和加密的 Web 浏览

?通过 S/MIME 协议签名和加密的电子邮件

?代码签名:它指的是使用数字证书对软件应用程序进行签名以安全分发和安装的过程。

通过使用由知名公共证书颁发机构颁发的证书对软件进行数字签名,开发人员可以向最终用户保证他们希望安装的软件是由已知且受信任的开发人员发布;并且签名后未被篡改或损害。

?还可用于文档签名

?还可用于客户端认证

?政府签发的电子身份证我们后面还会讨论。

HTTPS 的内核是 HTTP

HTTPS 并不是一项新的应用层协议,只是 HTTP 通信接口部分由 SSL 和 TLS 替代而已。通常情况下,HTTP 会先直接和 TCP 进行通信。在使用SSL 的 HTTPS 后,则会先演变为和 SSL 进行通信,然后再由 SSL 和 TCP 进行通信。也就是说,HTTPS 就是身披了一层 SSL 的 HTTP。

SSL 是一个独立的协议,不只有 HTTP 可以使用,其他应用层协议也可

以使用,比如SMTP(电子邮件协议)、Telnet(远程登录协议) 等都可以使

用。

探究 HTTPS

我说,你起这么牛逼的名字干嘛,还想吹牛批?你 HTTPS 不就抱上了TLS/SSL 的大腿么,咋这么牛批哄哄的,还想探究 HTTPS,瞎胡闹,赶紧改成 TLS 是我主,赞美我主。

SSL 即安全套接字层,它在 OSI 七层网络模型中处于第五层,SSL 在1999 年被IETF(互联网工程组)更名为 TLS ,即传输安全层,直到现在,TLS 一共出现过三个版本,1.1、1.2 和 1.3 ,目前最广泛使用的是 1.2,所以接下来的探讨都是基于 TLS 1.2 的版本上的。

TLS 用于两个通信应用程序之间提供保密性和数据完整性。TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术(如果你觉得一项技术很简单,那你只是没有学到位,任何技术都是有美感的,牛逼的人只是欣赏,并不是贬低)。

说了这么半天,我们还没有看到 TLS 的命名规范呢,下面举一个 TLS 例子来看一下 TLS 的结构。这是啥意思呢?我刚开始看也有点懵啊,但其实是有套路的,因为 TLS 的密码套件比较规范,基本格式就是密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法组成的一个密码串,有时候还有分组模式,我们先来看一下刚刚是什么意思。

使用 ECDHE 进行密钥交换,使用 ECDSA 进行签名和认证,然后使用AES 作为对称加密算法,密钥的长度是 256 位,使用 GCM 作为分组模式,最后使用 SHA384 作为摘要算法。

TLS 在根本上使用对称加密和非对称加密两种形式。

对称加密

在了解对称加密前,我们先来了解一下密码学的东西,在密码学中,有几个概念:明文、密文、加密、解密

?明文(Plaintext),一般认为明文是有意义的字符或者比特集,或者是通过某种公开编码就能获得的消息。明文通常用 m 或 p 表示

?密文(Ciphertext),对明文进行某种加密后就变成了密文

?加密(Encrypt),把原始的信息(明文)转换为密文的信息变换过程

?解密(Decrypt),把已经加密的信息恢复成明文的过程。

对称加密(Symmetrical Encryption)顾名思义就是指加密和解密时使用的密钥都是同样的密钥。只要保证了密钥的安全性,那么整个通信过程也就是具有了机密性。

TLS 里面有比较多的加密算法可供使用,比如 DES、3DES、AES、ChaCha20、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK 等。目前最常用的是AES-128, AES-192、AES-256 和 ChaCha20。

DES 的全称是Data Encryption Standard(数据加密标准) ,它是用于数字数据加密的对称密钥算法。尽管其 56 位的短密钥长度使它对于现代应用程序来说太不安全了,但它在加密技术的发展中具有很大的影响力。

3DES 是从原始数据加密标准(DES)衍生过来的加密算法,它在 90 年代后变得很重要,但是后面由于更加高级的算法出现,3DES 变得不再重要。

AES-128, AES-192 和 AES-256 都是属于 AES ,AES 的全称是Advanced Encryption Standard(高级加密标准),它是 DES 算法的替代者,安全强度很高,性能也很好,是应用最广泛的对称加密算法。

ChaCha20 是 Google 设计的另一种加密算法,密钥长度固定为 256

位,纯软件运行性能要超过 AES,曾经在移动客户端上比较流行,但 ARMv8

之后也加入了 AES 硬件优化,所以现在不再具有明显的优势,但仍然算得

上是一个不错算法。

(其他可自行搜索)

加密分组

对称加密算法还有一个分组模式的概念,对于 GCM 分组模式,只有

和 AES,CAMELLIA 和 ARIA 搭配使用,而 AES 显然是最受欢迎和部署最广

泛的选择,它可以让算法用固定长度的密钥加密任意长度的明文。

最早有 ECB、CBC、CFB、OFB 等几种分组模式,但都陆续被发现有安全漏洞,

所以现在基本都不怎么用了。最新的分组模式被称为AEAD

(Authenticated Encryption with Associated Data),在加密的同时增

加了认证的功能,常用的是 GCM、CCM 和 Poly1305。

比如ECDHE_ECDSA_AES128_GCM_SHA256 ,表示的是具有 128 位密钥,

AES256 将表示 256 位密钥。GCM 表示具有 128 位块的分组密码的现代认

证的关联数据加密(AEAD)操作模式。

我们上面谈到了对称加密,对称加密的加密方和解密方都使用同一个密

钥,也就是说,加密方必须对原始数据进行加密,然后再把密钥交给解密方

进行解密,然后才能解密数据,这就会造成什么问题?这就好比《小兵张嘎》

去送信(信已经被加密过),但是嘎子还拿着解密的密码,那嘎子要是在途

中被鬼子发现了,那这信可就是被完全的暴露了。所以,对称加密存在风险。非对称加密

非对称加密(Asymmetrical Encryption) 也被称为公钥加密,相对于

对称加密来说,非对称加密是一种新的改良加密方式。密钥通过网络传输交

换,它能够确保及时密钥被拦截,也不会暴露数据信息。非对称加密中有两

个密钥,一个是公钥,一个是私钥,公钥进行加密,私钥进行解密。公开密

钥可供任何人使用,私钥只有你自己能够知道。

使用公钥加密的文本只能使用私钥解密,同时,使用私钥加密的文本也

可以使用公钥解密。公钥不需要具有安全性,因为公钥需要在网络间进行传输,非对称加密可以解决密钥交换的问题。网站保管私钥,在网上任意分发

公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能

解密。而黑客因为没有私钥,所以就无法破解密文。

非对称加密算法的设计要比对称算法难得多(我们不会探讨具体的加密

方式),常见的比如 DH、DSA、RSA、ECC 等。其中RSA 加密算法是最重

要的、最出名的一个了。例如DHE_RSA_CAMELLIA128_GCM_SHA256。它的安

全性基于整数分解,使用两个超大素数的乘积作为生成密钥的材料,想要

从公钥推算出私钥是非常困难的。

ECC(Elliptic Curve Cryptography)也是非对称加密算法的一种,它基于椭圆曲线离散对数的数学难题,使用特定的曲线方程和基点生成公钥和

私钥, ECDHE 用于密钥交换,ECDSA 用于数字签名。

TLS 是使用对称加密和非对称加密的混合加密方式来实现机密性。

混合加密

RSA 的运算速度非常慢,而 AES 的加密速度比较快,而 TLS 正是使用了这

种混合加密方式。在通信刚开始的时候使用非对称算法,比如 RSA、ECDHE ,首先解决密钥交换的问题。然后用随机数产生对称算法使用的会话密钥(session key),再用公钥加密。对方拿到密文后用私钥解密,取出会话

密钥。这样,双方就实现了对称密钥的安全交换。

现在我们使用混合加密的方式实现了机密性,是不是就能够安全的传输

数据了呢?还不够,在机密性的基础上还要加上完整性、身份认证的特性,才能实现真正的安全。而实现完整性的主要手段是摘要算法(Digest

Algorithm)

摘要算法

如何实现完整性呢?在 TLS 中,实现完整性的手段主要是摘要算法(Digest Algorithm)。摘要算法你不清楚的话,MD5 你应该清楚,MD5 的全称是Message Digest Algorithm 5,它是属于密码哈希算法(cryptographic hash algorithm)的一种,MD5 可用于从任意长度的字符串创建 128 位字符串值。尽管 MD5 存在不安全因素,但是仍然沿用至今。MD5 最常用于验证文件的完整性。但是,它还用于其他安全协议和应用程序中,例如 SSH、SSL 和 IPSec。一些应用程序通过向明文加盐值或多次应用哈希函数来增强 MD5 算法。

什么是加盐?在密码学中,盐就是一项随机数据,用作哈希数据,密码或密码的单向函数的附加输入。盐用于保护存储中的密码。例如

什么是单向?就是在说这种算法没有密钥可以进行解密,只能进行单向加密,加密后的数据无法解密,不能逆推出原文。我们再回到摘要算法的讨论上来,其实你可以把摘要算法理解成一种特殊的压缩算法,它能够把任意长度的数据压缩成一种固定长度的字符串,这就好像是给数据加了一把锁。

除了常用的 MD5 是加密算法外,SHA-1(Secure Hash Algorithm

1) 也是一种常用的加密算法,不过 SHA-1 也是不安全的加密算法,在TLS 里面被禁止使用。目前 TLS 推荐使用的是 SHA-1 的后继者:SHA-2。

SHA-2 的全称是Secure Hash Algorithm 2 ,它在 2001 年被推出,它在 SHA-1 的基础上做了重大的修改,SHA-2 系列包含六个哈希函数,其摘要(哈希值)分别为 224、256、384 或 512 位:SHA-224, SHA-256, SHA-384, SHA-512。分别能够生成 28 字节、32 字节、48 字节、64 字节的摘要。

有了 SHA-2 的保护,就能够实现数据的完整性,哪怕你在文件中改变一个标点符号,增加一个空格,生成的文件摘要也会完全不同,不过 SHA-2 是基于明文的加密方式,还是不够安全,那应该用什么呢?

安全性更高的加密方式是使用HMAC,在理解什么是 HMAC 前,你需要先知道一下什么是 MAC。

MAC 的全称是message authentication code,它通过 MAC 算法从消息和

密钥生成,MAC 值允许验证者(也拥有秘密密钥)检测到消息内容的任何更改,从而保护了消息的数据完整性。

HMAC 是 MAC 更进一步的拓展,它是使用 MAC 值 + Hash 值的组合方式,HMAC 的计算中可以使用任何加密哈希函数,例如 SHA-256 等。

现在我们又解决了完整性的问题,那么就只剩下一个问题了,那就是认证,认证怎么做的呢?我们在向服务器发送数据的过程中,黑客(攻击者)

有可能伪装成任何一方来窃取信息。它可以伪装成你,来向服务器发送信息,

也可以伪装称为服务器,接受你发送的信息。那么怎么解决这个问题呢?

认证

如何确定你自己的唯一性呢?我们在上面的叙述过程中出现过公钥加密,私钥解密的这个概念。提到的私钥只有你一个人所有,能够辨别唯一性,所

以我们可以把顺序调换一下,变成私钥加密,公钥解密。使用私钥再加上摘

要算法,就能够实现数字签名,从而实现认证。

到现在,综合使用对称加密、非对称加密和摘要算法,我们已经实现了加密、数据认证、认证,那么是不是就安全了呢?非也,这里还存在一个数字签名的认证问题。因为私钥是是自己的,公钥是谁都可以发布,所以必须发布经过认证的公钥,才能解决公钥的信任问题。

所以引入了CA,CA 的全称是Certificate Authority,证书认证机构,你必须让 CA 颁布具有认证过的公钥,才能解决公钥的信任问题。全世界具有认证的 CA 就几家,分别颁布了 DV、OV、EV 三种,区别在于可信程度。DV 是最低的,只是域名级别的可信,EV 是最高的,经过了法律和审计的严格核查,可以证明网站拥有者的身份(在浏览器地址栏会显示出公司的名字,例如 Apple、GitHub 的网站)。不同的信任等级的机构一起形成了层级关系。

通常情况下,数字证书的申请人将生成由私钥和公钥以及证书签名请求(CSR)组成的密钥对。CSR是一个编码的文本文件,其中包含公钥和其他将包含在证书中的信息(例如域名,组织,电子邮件地址等)。密钥对和 CSR 生成通常在将要安装证书的服务器上完成,并且 CSR 中包含的信息类型取决于证书的验证级别。与公钥不同,申请人的私钥是安全的,永远不要向CA(或其他任何人)展示。

生成 CSR 后,申请人将其发送给 CA,CA 会验证其包含的信息是否正确,如果正确,则使用颁发的私钥对证书进行数字签名,然后将其发送给申请人。

总结

本篇文章我们主要讲述了 HTTPS 为什么会出现,HTTPS 解决了 HTTP 的什么问题,HTTPS 和 HTTP 的关系是什么,TLS 和 SSL 是什么,TLS 和SSL 解决了什么问题?如何实现一个真正安全的数据传输?

HTTPS协议简介

下面我们来一起学习一下 HTTPS ,首先问你一个问题,为什么有了 HTTP 之后,还需要有 HTTPS ?我突然有个想法,为什么我们面试的时候需要回答标准答案呢?为什么我们不说出我们自己的想法和见解,却要记住一 些所谓的标准回答呢?技术还有正确与否吗? HTTPS 为什么会出现 一个新技术的出现必定是为了解决某种问题的,那么 HTTPS 解决了 HTTP 的什么问题呢? HTTPS 解决了什么问题 一个简单的回答可能会是HTTP 它不安全。由于 HTTP 天生明文传输的特性,在 HTTP 的传输过程中,任何人都有可能从中截获、修改或者伪造请求发送,所以可以认为 HTTP 是不安全的;在 HTTP 的传输过程中不会验证通信方的身份,因此 HTTP 信息交换的双方可能会遭到伪装,也就是没有用户验证;在 HTTP 的传输过程中,接收方和发送方并不会验证报文的完整性,综上,为了解决上述问题,HTTPS 应用而生。 什么是 HTTPS 你还记得 HTTP 是怎么定义的吗?HTTP 是一种超文本传输协议(Hypertext Transfer Protocol) 协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范,那么我们看一下 HTTPS 是如何定义的HTTPS 的全称是Hypertext Transfer Protocol Secure,它用来在计算机网络上的两个端系统之间进行安全的交

换信息(secure communication),它相当于在 HTTP 的基础上加了一 个Secure 安全的词眼,那么我们可以给出一个 HTTPS 的定义:HTTPS 是一个在计算机世界里专门在两点之间安全的传输文字、图片、音频、视频等超文本数据的约定和规范。HTTPS 是 HTTP 协议的一种扩展,它本身并不保传输的证安全性,那么谁来保证安全性呢?在 HTTPS 中,使用传输层安全性(TLS)或安全套接字层(SSL)对通信协议进行加密。也就是 HTTP + SSL(TLS) = HTTPS。 HTTPS 做了什么 HTTPS 协议提供了三个关键的指标 ?加密(Encryption), HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。 ?数据一致性(Data integrity),数据在传输的过程中不会被窃听者所修改,用户发送的数据会完整的传输到服务端,保证用户发的是什么,服务器接收的就是什么。 ?身份认证(Authentication),是指确认对方的真实身份,也就是证明你是你(可以比作人脸识别),它可以防止中间人攻击并建立用户信任。 有了上面三个关键指标的保证,用户就可以和服务器进行安全的交换信息了。 那么,既然你说了 HTTPS 的种种好处,那么我怎么知道网站是用 HTTPS 的还是 HTTP 的呢?给你两幅图应该就可以解释了。

Apache配置HTTPS协议

Apache配置HTTPS协议搭载SSl配置全过程 1.安装必要的软件 从Apache官方(https://www.360docs.net/doc/012544512.html,)下载必要的ApacheHttpServer安装包,可以直接官方提供的绑定openssl的apache.文件名是: httpd-2.2.15-win32-x86-openssl-0.9.8m-r2.msi(我用的是Apache2.2.15for windows的版本,你可以点击此处下载最新的版本进行安装,最好选择含有openssl版本的哦) 否则单独安装windows下的openssl比较麻烦,要么找到一个第三方的编译结果,要么自己编译 安装完毕后检查检查在Apache安装路径的bin下是否有以下文件: openssl.exe

ssleay32.dll libeay32.dll 2. 生成服务器证书 安装好在bin目录下有一个openssl.exe文件,用来生成证书和密钥。 1). 生成服务器用的私钥文件server.key (注:在Windows操作系统环境下需先设置Openssl环境变量:在DOS命令下进入conf目录,执行命令行:set OPENSSL_CONF=..\conf\https://www.360docs.net/doc/012544512.html,f;请在执行之前确保https://www.360docs.net/doc/012544512.html,f存在,否则会出现:WARNING: can't open config file: /usr/local/ssl/https://www.360docs.net/doc/012544512.html,f 信息提示。还有在windows系统下.cnf 默认会被当成快捷方式,看不到扩展名。) 在DOS命令下进入bin目录,执行命令行 命令:openssl genrsa 1024> server.key 说明:这是用128位rsa算法生成密钥,得到server.key文件>是输出文件的标识符这种生成方法生成的是没有密钥的私钥文件,当然,Apache提供了加入密钥(Password)的命令,就是加入参数-des3,全部的命令为: 命令:openssl genrsa 1024-des3 > server.key 使用 openssl genrsa -des3 > 1024 server.key生成私钥文件是需要输入密钥的,运行的时候会让你输入并确认你的密钥,但是在Windows环境下会导致以下错误: 错误:Apache启动失败,错误提示是:Init: SSLPassPhraseDialog builtin is not supported on Win32 (key file .....) 原因是window下的apache不支持加密的私钥文件。可不使用des3加密。注:生成的证书中RSA密钥对的默认长度是1024,取值是2的整数次方。建议使用4096以上。

HTTPS传输协议原理介绍

HTTPS传输协议原理介绍 Hatter Jiang Apr 9th, 2008我们常常在使用网上银行时看到的连接都是以“https”开始的,那么这个https是什么呢?这其实是表示目前连接使用了SSL进行加密,能保证客户端到服务器端的通信都在被保护起来,那么浏览器是如果实现的呢?下面我们介绍一下SSL的基本实现方法。 首先我们有两种基本的加解密算法类型:对称加密,非对称加密(公私钥加密),现在介绍一下这两种加密算法的特点: 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等,示意图如下: 图1 对称加密 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等,示意图如下: 图2 非对称加密 根据上面的两种加密方法,现在我们就可以设计一种无法让他人在互联网上知道你的通讯信息的加密方法: 1.在服务器端存在一个公钥及私钥 2.客户端从服务器取得这个公钥 3.客户端产生一个随机的密钥 4.客户端通过公钥对密钥加密(非对称加密) 5.客户端发送到服务器端 6.服务器端接受这个密钥并且以后的服务器端和客户端的数据全部通过这个密钥加 密(对称加密) HTTPS通信过程的时序图如下:

图3 HTTPS通信时序图 正如上图所示,我们能保证下面几点: 1.客户端产生的密钥只有客户端和服务器端能得到 2.加密的数据只有客户端和服务器端才能得到明文 3.客户端到服务端的通信是安全的 当然实际的SSL实现算法复杂的多,并有数据校验、身份验证等功能,如果需要更多了角请参看RFC2246及RFC4346文档。 参考文献: [1] RFC2246 T. Dierks, C. Allen The TLS Protocol Version 1.0 [2] RFC4346 T.Dierks, E. Rescorla The Transport Layer Security (TLS) Protocol Version 1.1

大型互联网站点HTTPS实践(一):详解HTTPS协议和原理

大型互联网站点HTTPS实践(一):详解HTTPS协议和原理1 前言 百度作为搜索巨头,一举一动都牵动着大家神经。近日百度率先实行全站https加密搜索,默认将HTTP请求跳转成HTTPS,这一举措引起公众广泛关注和讨论。那么到底什么是https呢?全站部署https有什么重大意义?本文将重点介绍。 2 HTTPS 协议概述 HTTPS 可以认为是HTTP + TLS。HTTP 协议大家耳熟能详了,目前大部分WEB 应用和网站都是使用HTTP 协议传输的。 TLS 是传输层加密协议,它的前身是SSL 协议,最早由netscape 公司于1995 年发布,1999 年经过IETF 讨论和规范后,改名为TLS。如果没有特别说明,SSL 和TLS 说的都是同一个协议。 HTTP 和TLS 在协议层的位置以及TLS 协议的组成如下图: 图1 TLS 协议格式 TLS 协议主要有五部分:应用数据层协议,握手协议,报警协议,加密消息确认协议,心跳协议。

TLS 协议本身又是由record 协议传输的,record 协议的格式如上图最右所示。 目前常用的HTTP 协议是HTTP1.1,常用的TLS 协议版本有如下几个:TLS1.2, TLS1.1, TLS1.0 和SSL3.0。其中SSL3.0 由于POODLE 攻击已经被证明不安全,但统计发现依然有不到1% 的浏览器使用SSL3.0。TLS1.0 也存在部分安全漏洞,比如RC4 和BEAST 攻击。 TLS1.2 和TLS1.1 暂时没有已知的安全漏洞,比较安全,同时有大量扩展提升速度和性能,推荐大家使用。 需要关注一点的就是TLS1.3 将会是TLS 协议一个非常重大的改革。不管是安全性还是用户访问速度都会有质的提升。不过目前没有明确的发布时间。 同时HTTP2也已经正式定稿,这个由SPDY 协议演化而来的协议相比HTTP1.1 又是一个非常重大的变动,能够明显提升应用层数据的传输效率。 3 HTTPS 功能介绍 百度使用HTTPS 协议主要是为了保护用户隐私,防止流量劫持。 HTTP 本身是明文传输的,没有经过任何安全处理。例如用户在百度搜索了一个关键字,比如“苹果手机”,中间者完全能够查看到这个信息,并且有可能打电话过来骚扰用户。也有一些用户投诉使用百度时,发现首页或者结果页面浮了一个很长很大的广告,这也肯定是中间者往页面插的广告内容。如果劫持技术比较低劣的话,用户甚至无法访问百度。 这里提到的中间者主要指一些网络节点,是用户数据在浏览器和百度服务器中间传输必须要经过的节点。比如WIFI 热点,路由器,防火墙,反向代理,缓存服务器等。 在HTTP 协议下,中间者可以随意嗅探用户搜索内容,窃取隐私甚至篡改网页。不过HTTPS 是这些劫持行为的克星,能够完全有效地防御。

HTTPS协议

https HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。 一、信任主机的问题. 采用https的服务器必须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。所以目前所有的银行系统网站,关键部分应用都是

https 的。客户通过信任该证书,从而信任了该主机。其实这样做效率很低,但是银行更侧重安全。这一点对我们没有任何意义,我们的服务器,采用的证书不管是自己发布的还是从公众的地方发布的,其客户端都是自己人,所以我们也就肯定信任该服务器。 二、通讯过程中的数据的泄密和被篡改 1.一般意义上的https,就是服务器有一个证书。 a) 主要目的是保证服务器就是他声称的服务器,这个跟第一点一样。 b) 服务端和客户端之间的所有通讯,都是加密的。 i. 具体讲,是客户端产生一个对称的密钥,通过服务器的证书来交换密钥,即一般意义上的握手过程。 ii. 接下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥,当然篡改也就没有什么意义了。 2.少许对客户端有要求的情况下,会要求客户端也必须有一个证书。 a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码,还有一个CA 认证过的身份。因为个人证书一般来说是别人无法模拟的,所有这样能够更深的确认自己的身份。 b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘(即U盾)作为一个备份的载体。[1] 限制 概述 它的安全保护依赖浏览器的正确实现以及服务器软件、实际加密算法的支持. 一种常见的误解是“银行用户在线使用https:就能充分彻底保障他们的银行卡号不被偷窃。”实际上,与服务器的加密连接中能保护银行卡号的部分,只有用户到服务器之间的连接及服务器自身。并不能绝对确保服务器自己是安全的,这点甚至已被攻击者利用,常见例子是模仿银行域名的钓鱼攻击。少数罕见攻击在网站传输客户数据时发生,攻击者会尝试窃听传输中的数据。 商业网站被人们期望迅速尽早引入新的特殊处理程序到金融网关,仅保留传输码(transaction number)。不过他们常常存储银行卡号在同一个数据库里。那些数据库和服务器少数情况有可能被未授权用户攻击和损害。 TLS 1.1之前 这段仅针对TLS 1.1之前的状况。因为SSL位于http的下一层,并不能理解更高层协议,通常SSL服务器仅能颁证给特定的IP/端口组合。这是指它经常不能在虚拟主机(基于域名)上与HTTP正常组合成HTTPS。

HTTPS协议

HTTPS(Secure Hypertext Transfer Protocol)--安全超文本传输协议 它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP 应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。 WWW的核心——HTTP协议 众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP、Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用。
WWW 服务器使用的主要协议是HTTP协议,即超文体传输协议。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,因而HTTP协议允许用户在统一的界面下,采用不同的协议访问不同的服务,如FTP、Archie、SMTP、NNTP等。另外,HTTP协议还可用于名字服务器和分布式对象管理。 2.1 HTTP协议简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。 由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 2.2 HTTP协议的几个重要概念 1.连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。 2.消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。 3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号 4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。

https协议的全称呢

竭诚为您提供优质文档/双击可除 https协议的全称呢 篇一:https协议 https https(全称:hypertexttransferprotocoloversecuresocketlayer),是以安全为目标的http通道,简单讲是http的安全版。即http 下加入ssl层,https的安全基础是ssl,因此加密的详细内容就需要ssl。它是一个uRischeme(抽象标识符体系),句法类同http:体系。用于安全的http数据传输。https:uRl 表明它使用了http,但https存在不同于http的默认端口及一个加密/身份验证层(在http与tcp之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。 一、信任主机的问题. 采用https的服务器必须从ca(certificateauthority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。所以目前所有

的银行系统网站,关键部分应用都是 https的。客户通过信任该证书,从而信任了该主机。其实这样做效率很低,但是银行更侧重安全。这一点对我们没有任何意义,我们的服务器,采用的证书不管是自己发布的还是从公众的地方发布的,其客户端都是自己人,所以我们也就肯定信任该服务器。 二、通讯过程中的数据的泄密和被篡改 1.一般意义上的https,就是服务器有一个证书。 a)主要目的是保证服务器就是他声称的服务器,这个跟第一点一样。b)服务端和客户端之间的所有通讯,都是加密的。 i.具体讲,是客户端产生一个对称的密钥,通过服务器的证书来交换密钥,即一般意义上的握手过程。 ii.接下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥,当然篡改也就没有什么意义了。 2.少许对客户端有要求的情况下,会要求客户端也必须有一个证书。a)这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码,还有一个ca认证过的身份。因为个人证书一般来说是别人无法模拟的,所有这样能够更深的确认自己的身份。 b)目前少数个人银行的专业版是这种做法,具体证书可

HTTPS协议研究

HTTPS协议研究 原理:HTTPS协议位于TCP/IP协议与应用层各协议之间,是基于HTTP协议的一种 对传输数据加密的协议。可以将其简要分解为:HTTP+SSL.它建立在可靠的传输协议之上(如TCP协议等。)当数据经过TCP协议封装之后,SSL会对数据包进行进一步的加密和封装,然后让加密之后的数据包经过HTTP协议的进一步封装之后走在公共信道之上,加密之后的数据包能保证即使数据包被第三方截取之后也不能看到数据包里面的明文。 SSL协议可以提供以下三方面的安全功能服务(也可由下图1.1.1给出): (1)信息加密:在信息传输之前对需要传输的信息进行加密,主要的机密技术有对称加密技术(如DES、IDEA),也有非对称加密技术(如RSA),本文采用的是 RSA技术,在后文将进一步讲述。 (2)身份认证:SSL协议要求在握手交换数据之前进行身份验证,其中包括对服务器的验证和对客户的验证,主要的身份认证技术有RSA(数字签名技术)、DSA(数 字签名算法)、和ECDSA(椭圆曲线数字签名算法),本文采用的是RSA。 (3)信息完整性校验:在客户和服务器接收到数据后,双方需要验证数据在传送或者存储过程中未被篡改、删除或者插入等。即通信的发送方通过散列函数产生消息 验证码(MAC),接收方通过验证MAC来保证信息的完整性,此文运用MD5 算法来进行信息完整性的校验。 图1.1.1(来自百度)

解说上面的SSL会话过程: (注:SSL会话建立的前提是服务器端在本地通过非对称加密算法(RSA)生成一对密钥(包含密钥和公钥),并将公钥信息发送给CA证书颁发机构,CA给服务器端颁发数字证书,并将证书发送至服务器端。在本次实验中,服务器端也是证书颁发机构。) SSL会话建立过程: 第一步:客户端向服务器端建立连接请求(TCP/IP) 第二步:当TCP/IP建立完成后,客户端和服务器之间协商使用哪种加密算法,本文加密算法为RSA。 第三步:协商完成后,服务器将公钥发送给客户端,客户端接收公钥信息。 第四步:客户端到CA证书颁发机构下载CA公钥信息,并对服务器端发送的证书做验证。第五步:随后,客户端在本地通过对称加密算法生成密钥,然后用服务器端发送的公钥进行对这段密钥进行加密,发送至服务器端,其保证了数据的机密性。 第六步:服务器用自己的私钥对这段数据进行解密,得到密钥,然后将客户端的请求数据进行加密发送给客户端。 第七步:客户端接到响应,并用密钥进行解密,得到数据。 第八步:通信结束后,断开会话通道(TCP/IP) 实现: 环境:在windows server 2003 下建立站点,用windows server 2003 以及windows 7去访问加密的站点 安装软件以及服务:Ethereal 抓包工具 iis服务证书服务 思想: (1)安装虚拟机 windows server 2003 虚拟机连接的方式设为NAT连接,通过虚拟网卡来连接网络。 (2)在windows server 2003 上安装iis组件 主要步骤: 1.在windows server 2003 中利用信息服务(iis)创建站点 2.然后安装证书服务 3.在Web服务器上设置ssl,生成证书申请 4.在IE浏览器中提交证书申请 5.在证书颁发机构颁发证书 6.在IE浏览器中下载证书并在Web服务器中安装证书 7.完成证书的申请和下载后,可以访问站点。 具体实现步骤以及截图: 1,安装iis,创建站点

HTTP协议转换成HTTPS协议

HTTP协议转换成HTTPS协议 考虑到数据的安全敏感性采用https是超文本传输协议(HTTP)加SSL/TLS(数据链接层加密技术)的组合,用以鉴定网络服务器身份并且提供用户与服务器加密通讯。 本文以jboss-4.2.3.GA版本为例讲解配置https方法。(tomcat在后面) 一、为服务器生成证书keystore密钥文件 1.以下是我在cmd中的操作: %JAVA_HOME%\bin\keytool -genkey -alias server -keyalg RSA -keystore f:\server.keystore -validity 3650 或有相应提示输入提示信息 在F盘生成了一个server.keystore密钥文件。 -alias server key的别名。具体参数见本文档附录最后。 二、将生成好的server.keystore放入你的jboss安装目录 生成完后server.keystore放入D:\ jboss-4.2.3.GA\server\default\conf中。 三、修改server.xml文件 1.修改D:\jboss-4. 2. 3.GA\server\default\deploy\jboss-web.deployer 目录下的 server.xml文件。 2.找到

keystoreFile="${jboss.server.home.dir}/conf/server.keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS" 也可不去掉注释增加如下代码: keystoreFile:server.keystore 在jboss中的位置,在第二步中放的位置 keystorePass:在cmd命令中输入的key密码一定要一直 sslProtocol="TLS":加密方式 可以参考官网https://www.360docs.net/doc/012544512.html,/jbossweb/3.0.x/ssl-howto.html 四、修改项目中web.xml配置文件增加如下配置。 HtmlAdaptor An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application *.do Protection should be CONFIDENTIAL CONFIDENTIAL

HTTPS协议工作原理介绍

HTTPS协议工作原理介绍 随着网络越来越普及,应用越来越广泛,一些网络安全问题也会越来越引起网民的关注。近日百度开放收录HTTPS引起了大家对HTTPS讨论的热潮,那么什么是https,HTTPS的工作原理又是什么?本位给大家介绍HTTPS协议工作原理。 一、什么是HTTPS 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。 二、HTTPS安全吗 这个答案是肯定的,很安全。谷歌公司已经行动起来要大力推广HTTPS的使用。百度也率先启用了全站HTTPS搜索,并且开放收录HTTPS站点。个人站长可到沃通CA等机构去申请免费SSL证书进行网站HTTPS加密。 三、HTTPS工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述如下: 1.浏览器将自己支持的一套加密规则发送给网站。 2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。 3.获得网站证书之后浏览器要做以下工作: a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。 b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。 c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。 4.网站接收浏览器发来的数据之后要做以下的操作: a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。

IIS上如何发布HTTPS协议的网站(详细图解)

IIS6使用指南之六:在IIS中部署HTTPS服务 【来源:https://www.360docs.net/doc/012544512.html, 作者:风间子更新时间:2007-05-14 | 字体:大中小】 分享到新浪微博 在IIS中部署HTTPS服务非常简单,所需要的就是在Web服务器上具有服务器身份验证证书,并将证书绑定在Web站点。如果Web服务器属于活动目录并且活动目录中具有在线的企业证书颁发机构,则可以在配置过程中在线申请并自动安装Web服务器证书,否则你需要离线申请Web服务器证书。 申请Web服务器证书的步骤如下: 在Web服务器上运行管理工具下的Internet信息服务管理控制台,在左面板展开Web站点节点,然后右击需要部署HTTPS服务的网站,在此我右击默认网站,选择属性; 在默认网站属性对话框,点击目录安全性标签,然后点击服务器证书按钮;

在欢迎使用Web服务器证书向导页,点击下一步; 在服务器证书页,选择新建证书,点击下一步;如果已经具有其他的服务器身份验证证书,则可以选择分配现有证书来将现有证书分配给此Web站点;

接下来的操作步骤我根据证书申请方式的不同,分别进行介绍: 离线申请证书 如果活动目录中没有在线的企业证书颁发机构或者Web服务器并不位于活动目录环境中,那么你必须离线申请Web服务器证书。 在延迟或立即请求页,选择现在准备证书请求,但稍后发送,然后点击下一步;

在名字和安全性设置页,在名称栏为新证书输入一个容易分辨的名字,然后点击下一步;

在单位信息页,在单位和部门栏中分别输入相关信息,然后点击下一步; 在站点公用名称页,输入Web站点的FQDN https://www.360docs.net/doc/012544512.html,,然后点击下一步;

http协议与https协议的区别

http协议与https协议的区别 大家打开网页时,会发现大多数网站都是以http协议开头的,当然也有发现少部分以https开头,例如淘宝,那么,http协议和https协议哪个更安全呢? 小编在这里详细介绍给大家。 HTTP,即超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP 最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。 虽然是当前使用最广泛的协议,但是HTTP协议以明文方式发送内容,不提供任何方式的数据加密,这导致这种方式特别不安全。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。 所以HTTPS协议正是为解决该问题而生,它可以称之为HTTP协议的安全版。

安全套接字层超文本传输协议HTTPS为了数据传输的安全,在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 相比之下,HTTPS和HTTP的不同主要有以下四点: 一、https协议需要到ca申请证书,一般免费证书很少,需要交费。 二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

相关主题
相关文档
最新文档