zoukankan      html  css  js  c++  java
  • SSL 原理及 https 配置

    SSL 原理

    SSL 简介

    SSL (Secure Socket Layer), 中文名称 安全套接字.
    SSL 的出现, 主要是为了解决Web浏览器和Web服务器之间的安全传输问题.

    主要概念

    SSL 中主要有如下几个概念:

    • 传输加密: 所有消息加密后传输
    • 身份验证: 客户端验证可选, 服务端验证强制
    • 传输完整性: 传输的消息的完整性检查 (使用 MAC)

    建立安全连接的过程

    过程图:
    SSL 握手

    步骤说明:

    1. client 发送 clientHello 信息给 server
    2. server 识别之后发送 serverHello 给 client, 这个过程建立安全能力, 包括协议版本, sessionID, 加密算法, 压缩方法, 随机数.
    3. 此时 SSL 握手的第一阶段完成
    4. server 会向 client 发送server的证书 (证书中有 server 端的公钥)
    5. server 向 client 发送密钥交换信息. 同时还会请求 client 端的证书.
    6. server 发送 Hellodone 信息, 表示 server 端的请求结束.
    7. 此时 SSL 握手的第二阶段完成
    8. client 发送client证书 (client没有证书的话, 可以回复 server 无证书)
    9. client 生成一个对称密码, 并发送给 server (这里的信息用收到的 server 端公钥来加密)
    10. 如果 client 发送了client证书, 那么还会发送证书验证信息
    11. 此时 SSL 握手的第三阶段完成
    12. client 通知 server 以后通信用之前发送的对称密码加密, 并结束握手
    13. server 通知 client 以后通信用之前发送的对称密码加密, 并结束握手

    https 配置 (以 nginx 为例)

    centos6.6 x86_64 上实验

    1. 生成证书

      cd /etc/nginx
      openssl genrsa -des3 -out server.key 1024         # 设置证书密码
      openssl req -new -key server.key -out server.csr  # 根据提示输入各种信息
      cp server.key server.key.org
      openssl rsa -in server.key.org -out server.key
      openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
      
    2. 设置 https 的证书

      cat /etc/nginx/ssl.conf
      # HTTPS server
      #
      server {
          listen       443 ssl;
          server_name  localhost;
      
          ssl_certificate      /etc/nginx/server.crt;
          ssl_certificate_key  /etc/nginx/server.key;
      
          ssl_session_cache shared:SSL:1m;
          ssl_session_timeout  5m;
      
          ssl_ciphers  HIGH:!aNULL:!MD5;
          ssl_prefer_server_ciphers   on;
      
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm;
          }
      }
      
    3. 重启 nginx

      nginx -s reload
      
    4. 从浏览器中可以查看是否配置成功 (https://hostip/)

  • 相关阅读:
    [LeetCode] 22. Generate Parentheses
    3. Longest Substring Without Repeating Characters
    Python floor() 函数
    Python fabs() 函数
    Python exp() 函数
    Python cmp() 函数
    Python ceil() 函数
    小样本学习综述
    如何评估两张图片的差异
    网络模型mAP计算实现代码
  • 原文地址:https://www.cnblogs.com/wang_yb/p/4330689.html
Copyright © 2011-2022 走看看