🚀 大家好,我是小康。

今天给大家分享一个 HTTP 面试题 :HTTPS 的工作过程?

小技巧:在面试中,可以参考下面的示例回答,这样回答简洁明了。详细介绍部分则是为了帮助大家系统学习,以便应对面试官深入提问。

示例回答:

HTTPS 通过 SSL/TLS 协议确保数据传输的安全性和完整性。工作过程包括客户端发起请求、服务器发送证书、验证证书、生成对称密钥、加密通信和传输数据。


详细解释

HTTPS 工作过程

先来看个图:

1.客户端发起请求

  • 步骤:客户端(如浏览器)向服务器的 443 端口发起 HTTPS 请求,要求建立安全连接。
  • 示例:用户在浏览器中输入 https://www.example.com 并按下回车。

2.服务器发送证书

  • 步骤:服务器收到请求后,向客户端发送包含公钥的数字证书。这个证书由权威的证书颁发机构(CA)签名,包含服务器的公钥。
  • 示例:服务器返回 SSL/TLS 证书。

3.客户端验证证书

  • 步骤:客户端收到服务器的证书后,验证证书的有效性,包括证书是否由受信任的 CA 签发、证书是否在有效期内以及证书的域名是否与请求的域名匹配。
  • 示例:浏览器验证服务器证书的合法性。

4.生成对称密钥

  • 步骤:如果证书验证通过,客户端生成一个随机的对称密钥,并使用服务器的公钥对该密钥进行加密,然后将加密后的密钥发送给服务器。
  • 示例:浏览器生成对称密钥并加密发送给服务器。

5.服务器解密对称密钥

  • 步骤:服务器使用自己的私钥解密客户端发送的对称密钥。此时,客户端和服务器都持有相同的对称密钥。
  • 示例:服务器解密收到的对称密钥。

6.加密通信

  • 步骤:客户端和服务器使用这个对称密钥进行加密通信,确保数据在传输过程中不会被窃听或篡改。
  • 示例:客户端和服务器使用对称密钥加密和解密传输的数据。

7.传输数据

  • 步骤:加密通信建立后,客户端和服务器可以安全地传输数据。所有传输的数据都经过加密处理,确保数据的机密性和完整性。
  • 示例:用户与网站之间的所有数据交换都是加密的。

关键点总结

  • 客户端发起请求:浏览器请求 HTTPS 连接。
  • 服务器发送证书:服务器提供包含公钥的证书。
  • 客户端验证证书:浏览器验证证书的合法性,包括签发机构、有效期和域名匹配。
  • 生成对称密钥:客户端生成对称密钥并用服务器的公钥加密。
  • 服务器解密对称密钥:服务器使用私钥解密对称密钥。
  • 加密通信:使用对称密钥进行加密通信。
  • 传输数据:安全传输数据,确保数据的机密性和完整性。

细节说明:

上面 https 工作过程中(第二步和第五步)服务器的公钥和私钥是从哪里来的?

服务器的私钥和公钥是在设置 HTTPS 服务时生成的,并保存在服务器上。这个过程包括生成公钥和私钥,创建证书签名请求(CSR),然后从证书颁发机构(CA)获取数字证书,并配置在服务器上。

具体过程如下:(实际配置过程可能略有不同,但是原理类似):

  1. 生成密钥对
  • 在配置 HTTPS 服务时,服务器管理员使用加密工具(如 OpenSSL)生成一对公钥和私钥。

  • 示例命令

    1
    openssl genpkey -algorithm RSA -out private.key
  • 结果: 生成一个包含公钥和私钥的私钥文件 private.key。

  1. 创建证书签名请求(CSR)
  • 使用生成的私钥创建一个 CSR,其中包含公钥和其他信息(如域名)。

  • 示例命令

    1
    openssl req -new -key private.key -out server.csr
  • 结果:生成一个 CSR 文件(server.csr),包含公钥。

  1. 获取数字证书
  • 将 CSR 发送给权威的证书颁发机构(CA),由 CA 签名生成服务器的数字证书。

  • 示例命令

    1
    openssl x509 -req -days 365 -in server.csr -signkey private.key -out server.crt
  • 结果:CA 颁发一个数字证书(server.crt),包含服务器的公钥私钥并由 CA 签名。

  1. 配置服务器
  • 服务器管理员将 CA 签名的数字证书和私钥一起配置在服务器上。
  • 示例配置(Nginx)
    1
    2
    3
    4
    5
    6
    server {
    listen 443 ssl;
    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/private.key;
    ...
    }

想要了解更加详细介绍 HTTPS 工作过程的朋友可以参考这篇文章https://segmentfault.com/a/1190000021494676

上面的图来自该链接 https://segmentfault.com/a/1190000021494676,如有侵权,请及时联系我,我删掉!

最后:

欢迎大家关注我的微信公众号「跟着小康学编程」!本号致力于分享C/C++/Go/Java 语言学习、计算机基础原理、Linux 编程、数据库、微服务、容器技术 等内容。文章力求通俗易懂,并配有代码示例,方便初学者理解。如果您对这些内容感兴趣,欢迎关注我的公众号「跟着小康学编程」。

后续,我还会陆续分享各个方向的编程面试题,包括C/C++、Java、Go,以及操作系统、计算机网络、数据结构、数据库和微服务等领域,为大家的面试提供帮助。

此外,小康最近创建了一个技术交流群,专门用来讨论技术问题和解答读者的疑问。在阅读文章时,如果有不理解的知识点,欢迎大家加入交流群提问。我会尽力为大家解答。期待与大家共同进步!