在 Linux 上用 OpenSSL 配置 HTTPS,通常分三种常见场景。下面从最常用、最实用的角度一步一步讲。
# Ubuntu / Debian
sudo apt update
sudo apt install nginx openssl
# CentOS / Rocky / Alma
sudo yum install nginx openssl
⚠️ 浏览器会提示“不安全”,仅适合本地测试
# 创建证书目录
sudo mkdir -p /etc/nginx/ssl
# 生成私钥和自签名证书(有效期 365 天)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/server.key \
-out /etc/nginx/ssl/server.crt
信息填写示例:
Country Name (2 letter code) []:CN
State or Province Name []:Beijing
Organization Name []:MyCompany
Common Name []:example.com # 重要,填域名或 IP
编辑配置文件:
sudo vim /etc/nginx/conf.d/https.conf
内容示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/html;
index index.html;
}
sudo nginx -t
sudo systemctl restart nginx
访问:
https://服务器IP
✅ 生产环境推荐
# Ubuntu
sudo apt install certbot python3-certbot-nginx
# CentOS
sudo yum install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
certbot 会自动:
sudo certbot renew --dry-run
如果你只是想验证 HTTPS 原理:
openssl s_server -www -accept 4433 \
-key server.key -cert server.crt
访问:
https://127.0.0.1:4433
sudo netstat -tunlp | grep 443
sudo ufw allow 443
Common Name (CN) 必须和访问域名一致
| 场景 | 推荐方案 |
|---|---|
| 本地测试 | OpenSSL 自签名 |
| 服务器 HTTPS | Nginx + Let’s Encrypt |
| 学习原理 | OpenSSL s_server |
如果你愿意,可以告诉我:
我可以给你完全贴合你环境的配置方案。