HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

生成证书

openssl genrsa -out privateKey.key 2048
openssl req -new -x509 -days 365 -key privateKey.key -out server.crt

这三个命令使用 OpenSSL 工具来生成和签名 SSL 证书。

  1. openssl genrsa -out privateKey.key 2048
    1. 这个命令是使用 OpenSSL 工具生成一个带有 DES 3 加密的 RSA 私钥文件。
    2. openssl:命令行工具的名称。
    3. -genrsa:生成 RSA 密钥对的命令.
    4. -ges 3:使用 DES 3 算法对私钥进行加密。
    5. -out server.key:指定生成的私钥文件的输出路径和文件名。
  • 2048:指定生成的RSA密钥的长度为2048位。
  1. openssl req -new -x509 -days 365 -key privateKey.key -out server.crt
    • 该命令使用CSR文件和私钥文件来生成自签名的X.509证书。
    • -req选项表示使用CSR文件。
    • -days 365指定证书的有效期为365天。
    • -in server.csr指定了输入的CSR文件。
    • -signkey server.key指定了用于签名证书的私钥文件。
    • -out server. Crt 指定了生成的证书文件的输出路径。

配置 SSL

# upstream talebook-apps {
#   server localhost:8120;
#   server localhost:8121;
# }

  

server {
  listen 8004 ssl;
  server_name talebook.https.balance;
  # 用于指定SSL证书文件的路径
  ssl_certificate /home/ssl/server.crt;
  # 用于指定SSL证书的私钥文件的路径
  ssl_certificate_key /home/ssl/privateKey.key;
  # 用于指定支持的SSL/TLS协议版本
  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  # 用于指定支持的加密算法
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;
  # 如果设置了密码需要加上
  # ssl_password_file /home/ssl/cert.pass;

  location / {
    # 什么都不配置默认为轮询  
    proxy_pass http://talebook-apps;
  }
}

HTTPS 优化

SSL 操作会消耗额外的 CPU 资源。CPU 占用最多的操作是 SSL 握手。有两种方法可以最大程度地减少每个客户端的这些操作数:

  • 使保持活动连接能够通过一个连接发送多个请求;
  • 重用 SSL 会话参数以避免并行连接和后续连接的 SSL 握手;

会话存储在工作进程之间共享并由 ssl_session_cache 指令配置的 SSL 会话缓存中。一兆字节的缓存包含大约 4000 个会话。默认缓存超时为 5 分钟。可以使用 ssl_session_timeout 指令增加此超时。

以下是针对具有 10 MB 共享会话缓存的多核系统优化的示例配置:

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;