Skip to content

SSL 配置

SSL/TLS 基础知识

什么是 SSL/TLS?

SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)是用于加密网络通信的协议,确保数据在传输过程中不会被窃听或篡改。TLS 是 SSL 的升级版,目前大多数应用场景都使用 TLS 协议,但通常我们还是称为 SSL/TLS。

  • SSL/TLS 功能:
    • 加密:加密通信,防止数据泄露。
    • 身份验证:确保通信双方的身份是可信的。
    • 数据完整性:保证数据在传输过程中没有被篡改。

SSL/TLS 证书

SSL/TLS 使用证书来验证服务器的身份,证书通常由可信的证书颁发机构(CA)签发。

  • 自签名证书:自己生成的证书,不被浏览器默认信任,仅适合测试环境。
  • 受信任的证书:由受信任的 CA 机构颁发的证书,如 Let’s Encrypt,它们被浏览器默认信任。

配置 HTTPS 证书

Nginx 支持使用 SSL/TLS 配置 HTTPS,为网站提供加密通信。以下将介绍如何配置自签名证书和 Let’s Encrypt 证书。

生成自签名证书

自签名证书适用于测试和开发环境,不适合生产环境。以下是在服务器上生成自签名证书的步骤:

生成私钥和自签名证书

bash
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt
  • -x509:表示生成自签名证书。
  • -nodes:不对私钥进行密码保护。
  • -days 365:证书有效期为 365 天。
  • -newkey rsa:2048:生成 2048 位的 RSA 私钥。

生成后,会在 /etc/nginx/ssl/ 目录下生成 nginx-selfsigned.keynginx-selfsigned.crt 文件。

配置 Nginx 使用自签名证书

编辑 Nginx 的配置文件(如 /etc/nginx/nginx.conf/etc/nginx/sites-available/default),在 server 块中加入 SSL 配置。

nginx
server {
    listen 443 ssl;  # 监听 HTTPS 端口
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;  # 自签名证书文件路径
    ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;  # 私钥文件路径

    # 可选的SSL安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root /var/www/html;
        index index.html;
    }
}

配置完成后,重启 Nginx 使其生效:

bash
sudo nginx -t  # 测试配置文件
sudo systemctl restart nginx  # 重启Nginx

使用 Let’s Encrypt 证书(免费 SSL 证书)

Let’s Encrypt 提供免费且受信任的 SSL 证书,自动化工具 Certbot 可用于获取和更新证书。

安装 Certbot 和 Nginx 插件

在 Ubuntu 系统上安装 Certbot 和 Nginx 插件:

bash
sudo apt update
sudo apt install certbot python3-certbot-nginx

获取 SSL 证书

运行以下命令自动获取并配置 Let’s Encrypt 证书:

bash
sudo certbot --nginx -d example.com -d www.example.com
  • -d:指定域名,多个域名用空格分隔。

Certbot 会自动编辑 Nginx 配置文件并添加证书路径,同时生成自动续期任务。

Certbot 自动续期

Let’s Encrypt 证书有效期为 90 天,但 Certbot 提供自动续期功能。你可以通过以下命令手动测试续期:

bash
sudo certbot renew --dry-run

配置强制 HTTPS 重定向

为了确保所有的 HTTP 请求都使用 HTTPS,可以通过 Nginx 配置 HTTP 到 HTTPS 重定向。

在 Nginx 配置文件中,添加一个监听 HTTP 的 server 块,将所有的 HTTP 请求重定向到 HTTPS。

nginx
server {
    listen 80;  # 监听HTTP端口
    server_name example.com www.example.com;

    # 将所有请求重定向到HTTPS
    return 301 https://$host$request_uri;
}
  • listen 80:监听 HTTP 端口。
  • return 301:永久重定向到 HTTPS。

此配置会将所有请求 http://example.comhttp://www.example.com 重定向到 https://example.comhttps://www.example.com

优化 Nginx 的 SSL 安全性配置

为了提高 SSL/TLS 的安全性,可以进一步优化配置:

nginx
ssl_protocols TLSv1.2 TLSv1.3;  # 禁用不安全的协议
ssl_prefer_server_ciphers on;  # 使用服务器端定义的加密套件
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';  # 强加密套件
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_stapling on;  # 启用OCSP stapling
ssl_stapling_verify on;

总结

  • SSL/TLS 基础:确保网络通信的加密、安全和数据完整性。
  • 配置 HTTPS 证书:自签名证书适合测试环境,Let’s Encrypt 提供免费证书并支持自动续期。
  • 强制 HTTPS 重定向:确保所有请求都通过 HTTPS 进行,加固网站的安全性。
  • 安全优化:使用强加密协议、加密套件和 OCSP stapling 来提高 HTTPS 的安全性。
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!