在学习完计算机网络之后,为了更进一步,我查阅了各种资料了解了现在流行的HTTPS,提取需要的内容,最后总结出关于HTTPS的个人笔记
这篇笔记的特点是 用了对比了不同的资料描述后集成、我自己理解的语言、是根据一些面试问题回答的、我尝试了体系化知识点、部分知识暂时不作深入探究
如果有遇到有任何无法进展问题或者疑惑的地方,应该在讨论区留言 或者 其他途径以寻求及时的帮助,以加快学习效率 或者 培养独立解决问题的能力、扫清盲点、补充细节
目录
HTTPS 是什么
HTTPS 工作原理
HTTPS 协议的缺点
SSL 证书
证书 类型
SSL证书申请与规则
SSL证书的安全问题
HTTPS-SSL、TLS、HTTPS X.509
HTTP 与 HTTPS 的区别
为何不所有的网站都使用HTTPS
加密方式
对称加密
非对称加密
数字证书和数字签名
单向加密算法
历程
这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。
是什么
超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。
现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
特点
HTTPS占用443端口通讯。
在计算机网络上,HTTPS经由超文本传输协议(HTTP)进行通信,但利用SSL/TLS来加密数据包。
HTTPS作用是:
数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
数据完整性:内容传输经过完整性校验
身份认证:第三方无法伪造服务端(客户端)身份
HTTPS作用是:如不使用的角度
通信使用明文(不加密),内容可能被窃听
无法证明报文的完整性,所以可能遭篡改
不验证通信方的身份,因此有可能遭遇伪装
一句话
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。
握手过程的具体描述如下
1)浏览器将自己支持的一套加密规则发送给网站。
2)网站从中选出的一组加密算法与HASH算法,自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3)浏览器获得网站证书之后:
验证证书的合法性(就要验证颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)
如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数,并用证书中提供的公钥加密(如RSA公钥加密)该随机数。
使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4)网站接收浏览器发来的数据之后要做以下的操作: a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。 b) 使用密码加密一段握手消息,发送给浏览器。
5)浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码和对称加密算法进行加密。
TLS/SSL协议
不仅仅是一套加密传输的协议。
使用了非对称加密,对称加密以及HASH算法。
https握手阶段比较费时,会使页面加载时间延长50%,增加10%~20%的耗电。
https缓存不如http高效,会增加数据开销。
SSL证书也需要钱,功能越强大的证书费用越高。
SSL证书需要绑定IP,不能再同一个ip上绑定多个域名,ipv4资源支持不了这种消耗。
是什么
证书的格式是由X.509标准定义。
SSL证书负责传输公钥,是一种PKI(Public Key Infrastructure,公钥基础结构)证书。
SSL证书包含了
网站的域名
证书有效期
证书的颁发机构
用于加密传输密码的公钥
...
SSL/TLS协议提供的服务主要有
认证用户和服务器,确保数据发送到正确的客户机和服务器;
加密数据以防止数据中途被窃取;
维护数据的完整性,确保数据在传输过程中不被改变。
常见的证书根据用途不同大致有以下几种
SSL证书,用于加密HTTP协议,也就是HTTPS。
代码签名证书,用于签名二进制文件,比如Windows内核驱动,Firefox插件,Java代码签名等等。
客户端证书,用于加密邮件。
双因素证书,网银专业版使用的USB Key里面用的就是这种类型的证书。
CA(Certificate Authority)机构
受认证的该证书颁发机构颁发这些证书
针对企业与个人的不同,可申请的证书的类型也不同,价格也不同。
CA机构颁发的证书都是受信任的证书
SSL证书可以向CA机构通过付费的方式申请,也可以自己制作。
CA机构颁发的证书价格非常昂贵,而且有效期一般只有一年到三年不等(年数不同,价格也不同),过期之后还要再次交钱申请,因此一般只有企业才会申请证书。
但是随着个人网站的增多,目前也有针对个人的SSL证书服务,价格相对便宜一些,国内的话400多块钱就能申请到一个,国外更是有免费的SSL证书可以申请。
在申请SSL证书时需要向CA机构提供的信息
网站域名,营业执照,以及申请人的身份信息等
@网站的域名非常重要,申请人必须证明自己对域名有所有权。这是因为如果支持Hotmail.com,Gmail.com的SSL证书都可以随便申请,黑客们就不用做假证书欺骗了。
一个证书一般只绑定一个域名,如果CA机构心情好的话,会免费再绑一个
比如你要申请域名时绑定的域名是 www.runoob.com,
那么只有在浏览器地址是 菜鸟教程 - 学的不仅是技术,更是梦想! 的时候,这个证书才是受信任的,
如果地址是https://tt.runoob.com或者https://login.runoob.com,那么这个证书由于访问的域名与证书绑定的域名不同,仍然会被浏览器显示为不受信任的。
CA机构也提供申请通配符域名(例如,*.runoob.com)
通配符域名相当于绑定了主域名下的所有域名,因此使用起来非常方便
但是价格也超级昂贵,一个通配符域名一年大概得5000块钱,只有企业才可以申请。
一种典型的中间人攻击
就是SSL证书欺骗或者叫SSL劫持
SSL劫持 是什么
并非只是用于攻击目的,在一些特殊情况下利用SSL劫持我们可以更顺畅的访问网络
以攻击为目的的SSL劫持如果不注意浏览器安全提示的话,很容易就中招。
SSL劫持 机制
当网络中有中间人发起SSL劫持攻击时,攻击者会伪造一个SSL证书发给浏览器,这个时候由于伪造的SSL证书不受信任,浏览器会给出提示。
常见误区纠正:当SSL证书不受信任的时候,并不一定就是有SSL劫持发生
有种例外情况是:一些个人网站买不起合法的SSL证书,因此会自己制作一个SSL证书来加密传输的数据。
如果你经常访问某个个人网站,而且你知道这个网站是干什么的,那么这种情况可以不用担心。
但是如果你访问的是网银,在线支付,或者是hotmail.com,gmail.com等,这类公司性质的网站一定会申请合法的SSL证书(12306.cn除外),一旦SSL证书不受信任,应该果断的终止访问,这个时候网络中一定会存在异常行为,对于一些小区宽带的用户一定要注意这点。
SSL就是HTTPS中的“S”
是HTTPS的组成部分,负责加密协议
TLS是SSL的升级版
遵循X.509协议
OpenSSL免费的实现方案之一。保证CA(颁发者)和证书之间的权威性、可信任的关系
SSL/TLS协议在HTTPS的应用
CA机构颁发证书给证书申请者(网站管理员),网站管理员携带证书交给浏览器而被允许访问
SSL/TLS 的功能实现主要依赖于三类基本算法:
散列函数 、对称加密和非对称加密,
非对称加密实现身份认证和密钥协商
对称加密算法采用协商的密钥对数据加密
基于散列函数验证信息的完整性。
HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
HTTPS需要用到SSL证书,而HTTP不用;
HTTPS标准端口443,HTTP标准端口80;
HTTPS基于传输层,HTTP基于应用层;
HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
与纯文本通信相比,加密通信会消耗更多的CPU及内存资源
解决办法-性能调优
把证书部署在SLB或CDN,来解决此问题。
举个实际的例子。“双十一”期间,全站HTTPS的淘宝、天猫依然保证了网站和移动端的访问、浏览、交易等操作的顺畅、平滑。通过测试发现,经过优化后的许多页面性能与HTTP持平甚至还有小幅提升,因此HTTPS经过优化之后其实并不慢。
想要节约购买证书的开销也是原因之一。要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。
是什么
单密钥加密(公用一个密钥来对消息进行加密解密)
客户端和服务器约定好一个加密的密钥,然后通过密钥对信息进行加密,然后传输,然后解密
常见对称加密算法
有流式、分组两种,加密和解密都是使用的同一个密钥。
例如:DES、AES-GCM、ChaCha20-Poly1305等
DES算法:数据加密标准
以64比特的明文为一个单位来进行加密的 , 超过64比特的数据要求64比特的大小分组 , DES使用的密钥长度为64比特,但由于每隔7个比特设置一个奇偶校验位(检验错误),因此其密钥长度实际为56比特 。
实现原理
是什么
加密解密使用的是不同的密钥,所以是非对称
一组密钥,一个公钥,一个私钥,并且只知道公钥无法推断出私钥
通过公钥加密的内容,只有私钥才可以解开,而通过私钥加密的内容,只有公钥才可以解开。
使用机制
小红生成一对密钥,一公一私。发送公钥key1给小灰
小灰自己生成一个密钥key2(公钥),用key1对key2进行加密,发给小红
小红现在使用自己的密钥,解开了公钥key1,然后有了key2
之后的它们之间所有通信,就可以使用key2进行加密通信了
常见非对称加密算法RSA,DSA
RSA算法:(涉及n,e1,e2三个参数)
为了解决公钥来源的不安全性,引入第三方 数字证书认证中心(CA)
无法篡改的原因?
1.拿到证书,如果伪造证书,但是你没有CA的密钥C2
2.如果直接使用原数据,可以解密后看数据,证书里面是有host的,如果你的网站的host和证书不一致,也不行
是什么
将任意长度的信息转换为较短的固定长度的值(通常其长度要比信息小得多)
只能单向对明文进行加密,而不能逆向通过密文得到明文。
不需要使用密钥。因为没有密钥,所以就无法通过密文得到明文。
MD5,全称Message Digest Algorithm 5,翻译过来就是消息摘要算法第5版,
是计算机安全领域广泛使用的一种散列函数
用于确保信息传输的完整性
是一种单向加密算法,一种不可逆的加密方式。
MD5值长度固定为128位
涉及资料