[计网面试]关于https

[计网面试]关于https

技术杂谈小彩虹2021-08-18 16:24:33160A+A-

https

本文章的思路来自于菜饼老哥整理的计算机网络

1.HTTPHTTPS有什么区别?HTTPSS是什么意思?

img

HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

2.了解对称加密算法和非对称加密算法的区别吗?

单向加密和双向加密

加密算法首先分为两种:单向加密、双向加密。

单向加密是不可逆的,也就是只能加密,不能解密。通常用来传输类似用户名和密码,直接将加密后的数据提交到后台,因为后台不需要知道用户名和密码,可以直接将收到的加密后的数据存储到数据库。

双向加密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了。非对称算法与之不同,发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。

对称和非对称的区别

在使用对称密钥时,由于双方使用同样的密钥,因此在通信信道上可以进行一对一的双向保密通信,每一方既可用此密钥加密明文,并发送给对方,也可接收密文,用同一密钥对密文解密。这种保密通信仅限于持有此密钥的双方(如再有第三方就不保密了)。

在使用公开密钥时,在通信信道上可以是多对一的单向保密通信。

1.对称加密

对称加密:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密。

优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。

缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘 钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

在对称加密算法中常用的算法有:DES、AES等。

AES:密钥的长度可以为128、192和256位,也就是16个字节、24个字节和32个字节

DES:密钥的长度64位,8个字节。

2.非对称加密

非对称加密:一对密钥由公钥和私钥组成(可以使用很多对密钥)。私钥解密公钥加密数据,公钥解密私钥加密数据(私钥公钥可以互相加密解密)。

私钥只能由一方保管,不能外泄。公钥可以交给任何请求方。

如果某一信息用公开密钥加密,则必须用私有密钥解密,这就是实现保密的方法

如果某一信息用私有密钥加密,那么,它必须用公开密钥解密。这就是实现数字签名的方法

在非对称加密算法中常用的算法有:

RSA、Elgamal、背包算法、Rabin、Diffie-Hellman、ECC(椭圆曲线加密算法)。 使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。

缺点:速度较慢

优点:安全

3.TLS握手过程

​ HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现「身份认证和密钥协商」,对称加密算法采用「协商的密钥对数据加密」,基于散列函数「验证信息的完整性」。

image-20210606024432020

握手思路:

  • 商定双方通信所使用的的 TLS 版本 (例如 TLS1.0, 1.2, 1.3等等);
  • 确定双方所要使用的密码组合;
  • 客户端通过服务器的公钥和数字证书 (上篇文章已有介绍)上的数字签名验证服务端的身份;
  • 生成会话密钥,该密钥将用于握手结束后的对称加密。

握手的实现步骤

TLS 握手的确切步骤将根据所使用的密钥交换算法的类型以及双方支持的密码套件而有所不同。RSA 密钥交换算法最为常用。具体如下:

  1. **“客户端问候”消息:**客户端通过向服务器发送“hello”消息来发起握手。消息中包含客户端支持的 TLS 版本、支持的密码套件,以及称为“客户端随机数”的一串随机字节。
  2. **“服务器问候”消息:**作为对客户端问候消息的答复,服务器发送一条消息,内含服务器的 SSL 证书、服务器选择的密码套件,以及“服务器随机数”,即由服务器生成的另一串随机字节。
  3. **身份验证:**客户端通过 SSL 证书的证书颁发机构验证服务器的 SSL 证书。这将确认服务器确实是其声称的身份,并且客户端正在与域的实际所有者交互。
  4. **预主机密:**客户端再发送一串随机字节,即“预主机密”。预主机密使用公钥加密,并且只能由服务器使用私钥解密。(客户端从服务器的 SSL 证书获取公钥。)
  5. **使用的私钥:**服务器对预主机密进行解密。
  6. **创建会话密钥:**客户端和服务器均从客户端随机数、服务器随机数和预主机密生成会话密钥。它们应该得出相同的结果。
  7. **客户端就绪:**客户端发送一条“已完成”消息,该消息用会话密钥加密。
  8. **服务器就绪:**服务器发送一条“已完成”消息,该消息用会话密钥加密。
  9. **实现安全对称加密:**已完成握手,并且使用会话密钥继续进行通信。

4.证书是什么?有什么作用?

SSL(通常称为 TLS)是用于加密 Internet 流量和验证服务器身份的协议。任何具有 HTTPS 网址的网站都使用 SSL/TLS。请参阅什么是 SSL?什么是 TLS?来了解更多信息。

(1)SSL 证书包含哪些信息?【是啥玩意儿】

SSL 证书包含以下信息:

  • 证书是针对哪个域名颁发的
  • 证书颁发给哪一个人、组织或设备
  • 证书由哪一证书颁发机构颁发
  • 证书颁发机构的数字签名
  • 关联的子域
  • 证书的颁发日期
  • 证书的到期日期
  • 公钥(私钥为保密状态)

用于 SSL 的公钥和私钥本质上是用于加密和解密数据的长字符串。使用公钥加密的数据只能用私钥解密,反之亦然。

(2)为什么网站需要 SSL 证书?【作用】

网站需要 SSL 证书,以确保用户数据的安全,验证网站的所有权,防止攻击者创建站点的虚假版本,并且获得用户信任。

**加密:**SSL/TLS 加密之所以可行,是因为 SSL 证书促成了公钥私钥配对。客户端(例如 Web 浏览器)从服务器的 SSL 证书获取打开 TLS 连接所需的公钥。

**身份验证:**SSL 证书可验证客户端正在与实际拥有该域的正确服务器进行通信。这有助于防止域欺骗和其他类型的攻击。

**HTTPS:**对企业而言,HTTPS 网址必须使用 SSL证书,这一点最为重要。HTTPS 是 HTTP 的安全形式,HTTPS 网站是通过 SSL/TLS 加密流量的网站。

除了在传输过程中保护用户数据外,HTTPS 还使站点更值得用户信赖。许多用户不会注意到以 http:// 和 https:// 开头的网址的区别,但大多数浏览器都已开始用更加醒目的方式将 HTTP 站点标记为“不安全”,并且尝试为切换到 HTTPS 和增强安全性提供奖励。

5.常见的攻击手段(XSSCSRF

掘金Shellming

Xss(跨站脚本攻击)和 csrf (跨站请求伪造)

XSS 攻击是指攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。

攻击者对客户端网页注入的恶意脚本一般包括 JavaScript,有时也会包含 HTML 和 Flash。有很多种方式进行 XSS 攻击,但它们的共同点为:将一些隐私数据像 cookie、session 发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机器上进行一些恶意操作。

1.xss攻击的分类

XSS 攻击可以分为 3 类:反射型(非持久型)、存储型(持久型)、基于 DOM。

XSS 主要是通过输入框等形式提交 js 脚本,最终在页面上被执行。

2.xss的预防

(1)csp和同源策略

现在主流的浏览器内置了防范 XSS 的措施,例如 CSP。但对于开发者来说,也应该寻找可靠的解决方案来防止 XSS 攻击。

(2)HttpOnly 防止劫取 Cookie

HttpOnly 最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的 Javascript 访问带有 HttpOnly 属性的 Cookie。

上文有说到,攻击者可以通过注入恶意脚本获取用户的 Cookie 信息。通常 Cookie 中都包含了用户的登录凭证信息,攻击者在获取到 Cookie 之后,则可以发起 Cookie 劫持攻击。所以,严格来说,HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。

(3)输入检查

不要相信用户的任何输入。 对于用户的任何输入要进行检查、过滤和转义。建立可信任的字符和 HTML 标签白名单,对于不在白名单之列的字符或者标签进行过滤或编码。

在 XSS 防御中,输入检查一般是检查用户输入的数据中是否包含 <,> 等特殊字符,如果存在,则对特殊字符进行过滤或编码,这种方式也称为 XSS Filter。

而在一些前端框架中,都会有一份 decodingMap, 用于对用户输入所包含的特殊字符或标签进行编码或过滤,如 <,>,script,防止 XSS 攻击:

// vuejs 中的 decodingMap
// 在 vuejs 中,如果输入带 script 标签的内容,会直接过滤掉
const decodingMap = {
  '&lt;': '<',
  '&gt;': '>',
  '&quot;': '"',
  '&amp;': '&',
  '&#10;': '\n'
}

(4)输出检查

用户的输入会存在问题,服务端的输出也会存在问题。一般来说,除富文本的输出外,在变量输出到 HTML 页面时,可以使用编码或转义的方式来防御 XSS 攻击。例如利用 sanitize-html 对输出内容进行有规则的过滤之后再输出到页面中。

3.CSRF

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任

CSRF,即 Cross Site Request Forgery,中译是跨站请求伪造,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。

通常情况下,CSRF 攻击是攻击者借助受害者的 Cookie 骗取服务器的信任,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。

在用户已经登录目标站的前提下,访问到了攻击者的钓鱼网站,攻击者直接通过 url 调用目标站的接口,伪造用户的行为进行攻击,通常这个行为用户是不知情的。

4.CSRF 攻击的防范

当前,对 CSRF 攻击的防范措施主要有如下几种方式。

(1)验证码

验证码被认为是对抗 CSRF 攻击最简洁而有效的防御方法。

从上述示例中可以看出,CSRF 攻击往往是在用户不知情的情况下构造了网络请求。而验证码会强制用户必须与应用进行交互,才能完成最终请求。因为通常情况下,验证码能够很好地遏制 CSRF 攻击。

但验证码并不是万能的,因为出于用户考虑,不能给网站所有的操作都加上验证码。因此,验证码只能作为防御 CSRF 的一种辅助手段,而不能作为最主要的解决方案。

(2)Referer Check

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。通过 Referer Check,可以检查请求是否来自合法的"源"。

比如,如果用户要删除自己的帖子,那么先要登录 www.c.com,然后找到对应的页面,发起删除帖子的请求。此时,Referer 的值是 www.c.com;当请求是从 www.a.com 发起时,Referer 的值是 www.a.com 了。因此,要防御 CSRF 攻击,只需要对于每一个删帖请求验证其 Referer 值,如果是以 www.c.com 开头的域名,则说明该请求是来自网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是 CSRF 攻击,可以拒绝该请求。

针对上文的例子,可以在服务端增加如下代码:

if (req.headers.referer !== 'http://www.c.com:8002/') {
    res.write('csrf 攻击');
    return;
}

Referer Check 不仅能防范 CSRF 攻击,另一个应用场景是 "防止图片盗链"。

(3)添加 token 验证

CSRF 攻击之所以能够成功,是因为攻击者可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 Cookie 中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的 Cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入攻击者所不能伪造的信息,并且该信息不存在于 Cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

6.HTTPS的优缺点

(好死亡的问题,我给整不会了.............)

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们