模式切换
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.key
和 nginx-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.com
或 http://www.example.com
重定向到 https://example.com
或 https://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 的安全性。