文章目錄
- Linux自建證書并配置Nginx HTTPS
- 1. 準備工作
- 2. 安裝必要的工具
- 3. 自建證書腳本
- 3.1 創建CA根證書(可選,用于自簽名證書鏈)
- 3.2 創建服務器證書腳本
- 4. 證書文件說明
- 5. 配置Nginx使用HTTPS
- 5.1 創建證書存放目錄
- 5.2 配置Nginx站點
- 5.3 啟用站點配置
- 5.4 測試Nginx配置
- 6. 客戶端安裝CA證書(可選)
- Windows:
- Linux:
- macOS:
- 7. 驗證HTTPS配置
- 8. 自動續期腳本(可選)
- 9. 常見問題解決
- 9.1 瀏覽器不信任證書
- 9.2 Nginx啟動失敗
- 9.3 混合內容警告
- 10. 安全建議
Linux自建證書并配置Nginx HTTPS
1. 準備工作
在開始之前,請確保:
- 已安裝Linux服務器(本指南以Ubuntu/Debian為例)
- 已安裝Nginx
- 擁有root或sudo權限
- 服務器已開放443端口(HTTPS默認端口)
2. 安裝必要的工具
sudo apt update
sudo apt install -y nginx openssl
3. 自建證書腳本
3.1 創建CA根證書(可選,用于自簽名證書鏈)
#!/bin/bash# 創建CA私鑰
openssl genrsa -out ca.key 2048# 創建CA根證書
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \-subj "/C=CN/ST=Beijing/L=Beijing/O=YourOrg/OU=IT/CN=YourOrg Root CA"
3.2 創建服務器證書腳本
#!/bin/bashDOMAIN="yourdomain.com" # 替換為你的域名
EMAIL="admin@yourdomain.com" # 替換為你的郵箱# 創建私鑰
openssl genrsa -out $DOMAIN.key 2048# 創建證書簽名請求(CSR)
openssl req -new -key $DOMAIN.key -out $DOMAIN.csr \-subj "/C=CN/ST=Beijing/L=Beijing/O=YourOrg/OU=IT/CN=$DOMAIN"# 創建擴展配置文件
cat > $DOMAIN.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names[alt_names]
DNS.1 = $DOMAIN
DNS.2 = www.$DOMAIN
EOF# 使用CA簽發證書(如果是自簽名,使用下面的命令)
openssl x509 -req -in $DOMAIN.csr -CA ca.crt -CAkey ca.key -CAcreateserial \-out $DOMAIN.crt -days 365 -sha256 -extfile $DOMAIN.ext# 如果是完全自簽名證書(沒有CA),使用這個命令替代上面的
# openssl x509 -req -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt -days 365 -sha256 -extfile $DOMAIN.ext
將上述腳本保存為create_cert.sh
,然后執行:
chmod +x create_cert.sh
./create_cert.sh
4. 證書文件說明
執行完成后,你會得到以下文件:
ca.key
- CA私鑰(如果創建了CA)ca.crt
- CA根證書(如果創建了CA)yourdomain.com.key
- 服務器私鑰yourdomain.com.csr
- 證書簽名請求(可刪除)yourdomain.com.crt
- 服務器證書yourdomain.com.ext
- 擴展配置文件(可刪除)
5. 配置Nginx使用HTTPS
5.1 創建證書存放目錄
sudo mkdir -p /etc/nginx/ssl
sudo cp yourdomain.com.crt /etc/nginx/ssl/
sudo cp yourdomain.com.key /etc/nginx/ssl/
sudo chmod 600 /etc/nginx/ssl/*
5.2 配置Nginx站點
編輯或創建Nginx配置文件:
sudo nano /etc/nginx/sites-available/yourdomain.com
添加以下內容:
server {listen 80;server_name yourdomain.com www.yourdomain.com;return 301 https://$host$request_uri;
}server {listen 443 ssl http2;server_name yourdomain.com www.yourdomain.com;ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;# SSL配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 啟用HSTSadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 其他配置root /var/www/yourdomain.com/html;index index.html index.htm;location / {try_files $uri $uri/ =404;}# 其他location配置...
}
5.3 啟用站點配置
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
5.4 測試Nginx配置
sudo nginx -t
如果沒有錯誤,重新加載Nginx:
sudo systemctl reload nginx
6. 客戶端安裝CA證書(可選)
如果你使用了自建的CA根證書,需要在客戶端安裝ca.crt
以信任你的自簽名證書:
Windows:
- 雙擊
ca.crt
文件 - 選擇"安裝證書"
- 選擇"本地計算機"
- 選擇"將所有證書放入下列存儲",瀏覽選擇"受信任的根證書頒發機構"
- 完成安裝
Linux:
sudo cp ca.crt /usr/local/share/ca-certificates/yourorg-ca.crt
sudo update-ca-certificates
macOS:
- 雙擊
ca.crt
文件 - 在鑰匙串訪問中,找到該證書
- 右鍵選擇"獲取信息"
- 在"信任"部分,將"使用此證書時"設置為"始終信任"
7. 驗證HTTPS配置
- 使用瀏覽器訪問
https://yourdomain.com
,檢查是否能夠正常訪問(可能會有安全警告,因為使用的是自簽名證書) - 使用命令行驗證:
curl -vI https://yourdomain.com
8. 自動續期腳本(可選)
由于自簽名證書通常有效期較短,可以設置一個自動續期腳本:
#!/bin/bash# 續期證書腳本
DOMAIN="yourdomain.com"
CERT_DIR="/etc/nginx/ssl"
SCRIPT_DIR="/path/to/your/script"# 備份舊證書
cp $CERT_DIR/$DOMAIN.crt $CERT_DIR/$DOMAIN.crt.bak
cp $CERT_DIR/$DOMAIN.key $CERT_DIR/$DOMAIN.key.bak# 生成新證書
cd $SCRIPT_DIR
./create_cert.sh# 復制新證書
cp $DOMAIN.crt $CERT_DIR/
cp $DOMAIN.key $CERT_DIR/# 重新加載Nginx
systemctl reload nginx# 記錄日志
echo "$(date): Certificate renewed for $DOMAIN" >> /var/log/cert_renewal.log
然后添加到crontab中每月執行一次:
sudo crontab -e
添加以下行:
0 0 1 * * /path/to/renew_cert.sh
9. 常見問題解決
9.1 瀏覽器不信任證書
- 確保已安裝CA根證書(如果使用了CA)
- 檢查證書是否過期
- 確保證書中的域名與訪問的域名完全匹配
9.2 Nginx啟動失敗
- 使用
sudo nginx -t
檢查配置語法 - 檢查證書文件路徑是否正確
- 確保證書文件權限正確(nginx用戶可讀)
9.3 混合內容警告
- 確保網頁中所有資源(圖片、CSS、JS等)都使用HTTPS鏈接
- 可以使用內容安全策略(CSP)來強制HTTPS
10. 安全建議
- 定期更換私鑰和證書(建議每3-6個月)
- 保持私鑰的機密性(權限設置為600)
- 考慮使用Let’s Encrypt等免費CA獲取瀏覽器信任的證書
- 啟用OCSP Stapling以提高性能和安全
- 定期檢查SSL配置的安全性(可以使用SSL Labs測試)
通過以上步驟,你已經成功在Linux服務器上創建了自簽名證書,并為Nginx配置了HTTPS。對于生產環境,建議考慮使用受信任的CA頒發的證書(如Let’s Encrypt)以獲得更好的兼容性。