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