nginx 防止 ssl 窜到别的域名

1、进入 nginx 配置目录:
cd /usr/local/nginx/conf
mkdir ssl
2、生成自签名证书:
openssl req -x509 -nodes -days 1 -newkey rsa:2048 -keyout ssl/dummy.key -out ssl/dummy.crt -subj "/CN="
3、将下述代码添加到 nginx.conf
# 默认 server 块,拒绝其他域名的 SSL 请求
server {
listen 443 default_server ssl;
server_name _;
# 使用自签名证书或无效证书
ssl_certificate ssl/dummy.crt;
ssl_certificate_key ssl/dummy.key;
# 直接返回 403 或其他错误
return 403;
}

4、重启 nginx
nginx -t
systemctl reload nginx
5、访问时,出现 403 错误,即是配置成功。

在 Nginx 中防止 SSL 证书被其他域名“窜用”(即防止未经授权的域名使用你的 SSL 证书),需要确保你的服务器配置只允许合法域名访问,并通过适当的配置阻止非法域名的 HTTPS 请求。以下是具体步骤和配置建议:
1. 明确你的域名
确保你的 SSL 证书只绑定到你控制的合法域名。检查证书的 CN(Common Name)或 SAN(Subject Alternative Name)字段,确保只包含你的域名。
2. 配置 Nginx 只接受合法域名的请求
在 Nginx 配置中,明确指定 server_name
指令,确保服务器只响应特定域名的请求。对于其他未配置的域名,可以设置一个默认的 server 块来拒绝访问。
示例配置:
# 主域名配置
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /path/to/yourdomain.com.crt;
ssl_certificate_key /path/to/yourdomain.com.key;
# 其他 SSL 配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /var/www/yourdomain;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
# 默认 server 块,拒绝其他域名的 SSL 请求
server {
listen 443 default_server ssl;
server_name _;
# 使用自签名证书或无效证书
ssl_certificate /path/to/dummy.crt;
ssl_certificate_key /path/to/dummy.key;
# 直接返回 403 或其他错误
return 403;
}
说明:
server_name yourdomain.com www.yourdomain.com
:明确指定合法域名。
server_name _
:表示捕获所有未匹配的域名(默认 server 块)。
- 默认 server 块使用一个“假”证书(可以是自签名证书)并返回 403 错误,防止非法域名通过 HTTPS 访问。
3. 启用 HSTS(HTTP Strict Transport Security)
HSTS 强制浏览器只通过 HTTPS 访问你的域名,防止中间人攻击和 SSL 剥离攻击。
配置 HSTS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
说明:
max-age=31536000
:设置 HSTS 有效期为一年。
includeSubDomains
:对所有子域名生效。
- 确保在生产环境中测试后再启用 HSTS,因为一旦设置,浏览器会缓存此策略。
4. 限制 IP 或使用防火墙
如果其他域名通过 DNS 解析到你的服务器 IP,可以结合防火墙(如 iptables
或云服务商的防火墙)限制访问:
5. 防止 DNS 劫持
- 确保你的域名 DNS 配置正确,使用可信的 DNS 提供商。
- 启用 DNSSEC(DNS Security Extensions)以防止 DNS 欺骗。
6. 监控和日志
启用 Nginx 访问日志,监控是否有非法域名尝试访问你的服务器:
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
定期检查日志,查看是否有异常的 Host
请求头。
7. 使用 CAA 记录(可选)
在 DNS 中添加 CAA(Certification Authority Authorization)记录,限制哪些证书颁发机构(CA)可以为你的域名签发证书。例如:
yourdomain.com. CAA 0 issue "letsencrypt.org"
这限制只有 Let’s Encrypt 可以为你的域名签发证书。
8. 测试配置
- 使用
nginx -t
检查配置文件语法是否正确。
- 重启 Nginx:
systemctl restart nginx
。
- 使用工具如
curl
或浏览器测试非合法域名是否被正确拒绝。
注意事项
- 如果你使用的是通配符证书(
*.yourdomain.com
),子域名可能更容易被滥用,建议明确指定 SAN 列表。
- 如果你的服务器被其他域名通过 DNS 解析指向(即 CNAME 或 A 记录指向你的 IP),需要结合防火墙或默认 server 块来防御。
- 定期更新 SSL/TLS 配置,禁用不安全的协议和密码套件。
通过以上配置,可以有效防止 SSL 证书被其他域名“窜用”,确保你的 HTTPS 服务只为合法域名提供安全访问。如果需要更具体帮助,请提供你的 Nginx 配置或具体场景!