Https 那点事

Https 那点事

本文分三块叙述:

1 CA相关知识

2HTTPS 通信过程

3如何搭建https服务

首先总体看下https 通信过程:

1.服务器向CA机构获取证书,当浏览器首次请求服务器的时候,服务器返回证书给浏览器。(证书包含:公钥+申请者与颁发者的相关信息+签名)

2.浏览器得到证书后,开始验证证书的相关信息,证书有效(没过期等)。

3.验证完证书后,如果证书有效,客户端是生成一个随机数,然后用证书中的公钥进行加密,加密后,发送给服务器,服务器用私钥进行解密,得到随机数。之后双方便开始用该随机数作为钥匙,对要传递的数据进行加密、解密

接下来进行一一解释


-------------------------CA相关-----------------------------

什么是CA

CA是Certificate Authority的缩写,也叫“证书授权中心”。

  它是负责管理和签发证书的第三方机构,CA必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。

在我国,要成为CA必须获得国家工信部的批准。我国第一家获得CA资质的机构是山东省数字证书认证管理有限公司,获批于2005年8月19日。

目前,全球主流的CA机构有Symantec、GeoTrust、DigiCert、Thawte、GlobalSign、RapidSSL等。

不管对于企业还是个人用户而言,安装由权威CA机构颁发的SSL证书,访问HTTPS加密网站,才是网站的“正确打开方式”

什么是CA证书?

CA 证书,顾名思义,就是CA颁发的证书。

  尽管CA证书如此强大,也不是所有需要数字证书的地方,都必须使用CA证书。假如业务需求的安全等级不高,使用自主研发的数字证书也可以,没有达到国家标准的必要。

但如果是公众应用软件,使用主流CA证书就可以避免安全防护软件的质疑询问,给用户的体验更良好。

假如要开发一个在iOS环境下运行的软件,就必须先向苹果公司旗下的CA申请数字证书。

当软件开发完成运行时,iOS系统会自动对软件内置的数字证书进行验证,以此确保系统的安全和稳定。

但为此,软件开发商需要付出更多的软件开发成本,用于支付购买各种证书的费用。

由此我们可以看出,使用数字证书,就是校验数字证书的过程。


CA签发过程:

1 .服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;

注意:申请证书不需要提供私钥,确保私钥永远只能服务器掌握

2 .CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;

3 .如信息审核通过,CA 会向申请者签发认证文件-证书。

总结下:

证书=公钥+申请者与颁发者信息+签名

证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;

签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;


CA证书验证过程:

1 .客户端 C 向服务器 S 发出请求时,S 返回证书文件;

2 .客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,用CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;

3.客户端然后验证证书相关的域名信息、有效时间等信息;

4.客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。


-------------------------HTTPS相关-----------------------------

什么是HTTPS协议

可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输

http网络协议栈:

<table><tbody>

http

tcp

ip

/<tbody>/<table>

https 网络协议栈:

<table><tbody>

HTTP

ssl

tcp

ip

/<tbody>/<table>

HTTPS 相比 HTTP 添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。意味着每次通信都多走层SSL协议。SSL为数据通信提供安全保证。

SSL如何保证通信安全?

1 HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

2 HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,具体通信内容采用对称加密(注意是对称加密),但对称加密的密钥用服务器方的证书进行了非对称加密。

接下来看下图,解释上文提到的通信内容采用的对称加密秘钥如何生成

Https 那点事

前5步其实就是HTTPS的握手过程,这个过程主要是认证服务端证书(内置的公钥)的合法性。因为非对称加密计算量较大,整个通信过程只会用到一次非对称加密算法(主要是用来保护传输客户端生成的用于对称加密的随机数私钥)。后续内容的加解密都是通过一开始约定好的对称加密算法进行的。

有同学可能会疑惑为什么又多弄出个对称加密?

1 什么是对称加密? 是指加密和解密使用的密钥是同一个密钥,或者可以相互推算。

2 对称加密的优点? 是算法简单,加解密效率高,系统开销小,适合对大数据量加密。

3 对称加密的缺点? 是解密加密使用同一个密钥,需要考虑远程通信的情况下如何安全的交换密钥,如果密钥丢失,

所谓的加密解密就失效了。

4 结论: 由于非对称加密的计算量大,而且对字节数有一点限制,显然不适合对具体的通信过程做加密,这就引出了对称加密来提高通信效率。这其实是一个折中的设计

握手过程的简单描述:

1.客户端C 将自己支持的一套加密规则发送给服务端。

2.服务端S 从中选出一组加密算法与HASH算法,并将自己的身份信息以CA证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

3.客户端C 获得服务端S 证书之后浏览器要做以下工作:

a) 验证CA证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,如果客户端是浏览器,那么地址栏里面会显示一个小锁头,否则会给出证书不受信的提示。

b) 如果证书受信任,或者是用户接受了不受信的证书,客户端C 会生成一串随机数的密码,并用证书中提供的公钥加密。

c) 使用约定好的HASH计算握手消息,并使用生成的随机数密码对消息进行加密,最后将之前生成的所有信息发送给网站。

4.服务端S 接收 客户端C 发来的数据之后要做以下的操作:

a) 使用自己的私钥将信息解密取出客户端生成的随机密码R,使用该密R码解密浏览器发来的握手消息,并验证HASH是否与客户端C 发来的一致。

b) 使用密码加密一段握手消息,发送给客户端C。

5.客户端C 用R密码解密并计算握手消息的HASH,如果与服务端发来的HASH一致,

此时握手过程结束,之后所有的通信数据将由之前客户端C 生成的随机密码R并采用对称加密算法进行加密。

有同学疑惑为什么弄这么复杂的握手过程?

客户端C与服务端S互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。由此可见TLS/SSL中使用了非对称加密,对称加密以及HASH算法。接下来再复盘下三者如何协同工作

HTTPS一般使用的加密与HASH算法如下:

非对称加密算法:RSA,DSA/DSS

对称加密算法:AES,RC4,3DES

HASH算法:MD5,SHA1,SHA256

其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。

Https 那点事

由于客户端C 生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。

非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而服务端S 的私钥用于对数据进行解密,所以服务端S都会非常小心的保管自己的私钥,防止泄漏。

TLS握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。


-------------------------HTTPS服务搭建-----------------------------

说了那么对理论,接下来探讨如何搭建https 服务。公式: https = http+ssl.那么我们就需要在原有的http协议栈中添加SSL模块。接下来会举两个例子:tomcat 与 nginx 如何搭建来供参考


后台回复「 https 」来获取相关文章



Https 那点事


分享到:


相關文章: