配置 HTTPS 需要同时处理 证书申请 和 服务器配置。以下是针对不同场景的详细配置指南:
一、证书申请方式
1. 免费证书(Let's Encrypt)
适用于个人网站或测试环境,支持自动续期:
- 工具:使用
certbot
自动申请与配置(需服务器有 root 权限) - 支持的服务器:Nginx、Apache、Docker、Caddy 等
2. 付费证书(阿里云 / 腾讯云)
适用于企业网站,提供更高等级的认证(如 EV 证书):
- 优势:受浏览器信任度更高,部分证书支持多域名 / 通配符
- 流程:在云服务商控制台申请 → 域名验证 → 下载证书文件
二、服务器配置(以 Nginx 为例)
1. 获取证书后配置 Nginx
假设已将证书文件(cert.pem
和 key.pem
)上传至服务器:
nginx
# HTTP 端口(80)配置,重定向到 HTTPS
server {
listen 80;
server_name yourdomain.com; # 替换为你的域名
return 301 https://$host$request_uri;
}
# HTTPS 端口(443)配置
server {
listen 443 ssl;
server_name yourdomain.com; # 替换为你的域名
# SSL 证书路径
ssl_certificate /path/to/cert.pem; # 替换为证书路径
ssl_certificate_key /path/to/key.pem; # 替换为私钥路径
# 安全增强配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 网站根目录配置
location / {
root /var/www/html; # 替换为网站文件路径
index index.html index.htm;
}
}
2. 验证配置并重启 Nginx
bash
# 检查配置语法
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
三、Docker 容器配置 HTTPS
1. 方式一:容器内配置(推荐)
在 Dockerfile 中安装 Nginx/Apache,并配置 HTTPS:
Dockerfile
# 使用 Nginx 官方镜像
FROM nginx:alpine
# 复制证书和配置文件
COPY cert.pem /etc/nginx/cert.pem
COPY key.pem /etc/nginx/key.pem
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露 HTTPS 端口
EXPOSE 443
# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
2. 方式二:使用反向代理(如 Traefik)
通过 Traefik 自动为容器分配 HTTPS 证书:
yaml
version: '3'
services:
traefik:
image: traefik:v2.9
command:
- --providers.docker
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.myresolver.acme.tlschallenge=true
- --certificatesresolvers.myresolver.acme.email=your@email.com # 替换为你的邮箱
- --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./letsencrypt:/letsencrypt
whoami:
image: traefik/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.yourdomain.com`)" # 替换为你的域名
- "traefik.http.routers.whoami.tls.certresolver=myresolver"
四、Apache 服务器配置
apache
# 启用 SSL 模块
LoadModule ssl_module modules/mod_ssl.so
# HTTP 重定向到 HTTPS
<VirtualHost *:80>
ServerName yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
# HTTPS 配置
<VirtualHost *:443>
ServerName yourdomain.com
# SSL 证书配置
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
SSLCertificateChainFile /path/to/chain.pem # 如果有中间证书
# 网站目录配置
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
五、常见问题与解决方案
1. 证书安装后仍显示 “不安全”
- 原因:证书链不完整、域名与证书不匹配、HSTS 缓存问题
- 解决方案:
- 确保证书链文件(chain.pem)正确配置
- 使用 SSL Labs 检测证书配置:SSL Server Test (Powered by Qualys SSL Labs)
- 清除浏览器缓存或使用
chrome://net-internals/#hsts
解除 HSTS 强制
2. 混合内容(HTTP 资源)问题
- 现象:HTTPS 页面中包含 HTTP 资源(如图片、脚本)
- 解决方案:
- 使用相对路径(如
src="/images/logo.png"
) - 配置 Content-Security-Policy(CSP):
nginx
add_header Content-Security-Policy "default-src 'self' https:;";
- 使用相对路径(如
3. 端口占用问题
- 现象:443 端口被其他服务占用
- 解决方案:
bash
# 查看端口占用情况 sudo lsof -i :443 # 停止占用服务(如 Apache) sudo systemctl stop apache2
六、安全增强配置
1. 启用 HSTS(HTTP 严格传输安全)
强制浏览器始终使用 HTTPS 访问:
nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
2. 配置 OCSP Stapling
提高证书验证效率:
nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
七、总结
配置 HTTPS 的核心步骤:
- 获取证书:通过 Let's Encrypt 或云服务商申请
- 配置服务器:将证书文件部署到 Nginx/Apache/Docker 中
- 重定向 HTTP 到 HTTPS:确保所有请求使用安全协议
- 验证配置:通过浏览器和工具检查安全性