1.生成或獲取SSL證書
使用openssl生成自簽名證書
# req -x509 生成自簽名證書
# -newkey rsa:4096 生成一個新的私鑰,指定為4096位的RSA金鑰對
# -keyout key.pem 私鑰儲存到key.pem檔案
# -out cert.pem 自簽名證書儲存到cert.pem檔案
# -days 365 證書的有效期為365天
# -nodes 不加密私鑰檔案
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
執行命令後會提示輸入一些資訊,如"Country Name, State or Province Name, Locality Name, Organization Name, Organizational Unit Name, Common Name, Email Address"。這些資訊將被包含在生成的證書中,都可以為空。
或者從可信的證書頒發機構(CA)獲取證書。
2. 在Flask中使用SSL證書
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == "__main__":
# cert.pem是生成的證書檔案,key.pem是生成的私鑰檔案
app.run(host='0.0.0.0', port='5000', ssl_context=('cert.pem', 'key.pem'))
3. Nginx配置https反向代理
可用nginx -t
命令檢視nginx配置檔案路徑,預設在/etc/nginx/nginx.conf
server {
listen 80;
server_name yourdomain.com;
# HTTP重定向到HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name yourdomain.com;
# 配置SSL證書和私鑰路徑
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 配置SSL協議和加密套件
ssl_protocols TLSv1.2 TLSv1.3; # 啟用TLS協議版本
ssl_ciphers HIGH:!aNull:!MD5; # 配置安全的加密套件
ssl_prefer_server_ciphers on; # 優先使用伺服器端的加密套件
location / {
# 反向代理到後端伺服器
proxy_pass https://127.0.0.1:5000;
# 設定代理頭資訊
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
修改後檢查配置是否正確: nginx -t
重新載入: nginx -s reload