4

网络 | HTTPS解决了什么问题

 2 years ago
source link: https://jiac3366.github.io/2021/12/20/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/HTTPS/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

网络 | HTTPS解决了什么问题

  • HTTPS解决的问题

    TLS1.0就是SSL v3.1
    ​对于小文件 握手会更多影响性能 主要考验非对称加密算法eg: RSA性能
    对于大文件 对称加密算法eg: AES更影响

    • 混合加密——机密性
      只要公钥才能解开私钥加密的信息

    • 摘要算法——完整性

      • 会话密钥加密:明文摘要,会话密钥接触明文和摘要,重新用摘要算法加密明文和收到的摘要对比
    • 数字证书——身份验证

      :你怎么鉴别别人给你的公钥是对的?毕竟每个人都可以创建自己的公钥和私钥

      • 客户端先向服务器端索要的不是服务器的公钥,而是经过CA验证的数字证书
        许多浏览器和操作系统内置根证书,可以人为相信一个证书

      • 数字证书包含但不限于服务器的公钥(相当于原文)和数字签名(CA私钥加密服务器公钥的摘要,私钥加密摘要就是签名)

      • 用CA公钥验证数字证书——客户端使用CA的公钥解密数字签名得到摘要1,再用摘要算法加密服务器公钥,结果与摘要1作对比(验证CA身份和公钥完整性)

    • HTTPS如何通信

      • 需要2对公钥私钥
        因为黑客可以使用一方的公钥模拟另一方

      • HTTPS通信大致流程

        • 客户端验证数字证书

        • 协商生成会话密钥

        • 使用非对称加密传输会话密钥

        • 双方采用会话密钥进行通信

      • TLS1.2 的四次握手大致流程 (TLS1.3是三次握手-p41)

        • clientHello

          • tls协议版本

          • 随机数(协商对称密钥的时候使用)
            Nonce 随机数保证唯一,或者 Timestamp 和 Nonce 合起来保证唯一,同样的,请求只接受一次,于是服务器多次收到相同的 Timestamp 和 Nonce,则视为无效即可

          • 密码套件、压缩算法

        • serverHello

          • 确认clientHello内容:协议版本和密码套件、压缩算法

          • 并返回随机数、数字证书

        • client继续做下列事情:

          • 通过浏览器或者OS中的 CA 公钥去解密server的数字证书,如果双端tls,也把自己的证书发过去

          • 如果证书ok:取出服务器公钥加密发送以下内容

            • Client Key Exchange:生成并发送第三个随机数Pre-Master
              到目前为止,客户端和服务器都有了三个随机数,分别是:自己的、对端的,以及刚生成的 Pre-Master 随机数。通过这三个随机数,可以在客户端和服务器产生相同的对称密钥(不发送)。

            • Change Cipher Spec: 表示接下来用会话密钥加密:

            • Encrypted Handshake Message: 把以前的内容都做个摘要供server校验

        • server回应:通过3个随机数和协商的加密套件,计算本次的会话密钥(各⾃⽣成,如果前面3个随机数一致,应该大家生成的都一样)

          • 同样也发送 Change Cipher Spec和 Encrypted Handshake Message 的消息
  • openssl命令

    • generated key-cert : openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj “/CN=cncamp.com/O=cncamp“ -addext “subjectAltName = DNS:cncamp.com
      自己给自己颁发证书,Self-Signed Certificate

    • 通过这个命令先创建私钥 openssl genrsa -out cliu8siteprivate.key 1024

    • 根据这个私钥,创建对应的公钥 openssl rsa -in cliu8siteprivate.key -pubout -outcliu8sitepublic.pem

    • 生成证书需要发起一个证书请求,然后将这个请求发给CA去认证: openssl req -key cliu8siteprivate.key -new -out cliu8sitecertificate.req
      CA会给这个证书卡一个章,我们称为签名算法。签名算法大概是这样工作的:一般是对信息做一个 Hash 计算,得到一个 Hash 值。把信息发送出去时,把这个 Hash 值加密后,作为一个签名,和信息一起发出去。

    • 权威机构给证书签名的命令是这样的: openssl x509 -req -in cliu8sitecertificate.req -CA cacertificate.pem -CAkey caprivate.key -out cliu8sitecertificate.pem
      这个命令会返回 Signature ok,而 cliu8sitecertificate.pem 就是签过名的证书。CA 用自己的私钥给外卖网站的公钥签名,就相当于给外卖网站背书,形成了外卖网站的证书。

    • 查看这个证书的内容:openssl x509 -in cliu8sitecertificate.pem -noout -text
      这里面有个 Issuer,也即证书是谁颁发的;Subject,就是证书颁发给谁;Validity 是证书期限;Public-key 是公钥内容;Signature Algorithm 是签名算法


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK