本文记录了我从阿里云申请免费SSL证书,到完整部署到Flask个人博客的全过程。包含详细步骤、踩坑经验和可直接使用的生产级代码。


前言

最近给自己的Flask个人博客部署了HTTPS,整个过程比想象中简单很多。阿里云提供免费的DV SSL证书,有效期3个月,对于个人博客来说完全够用。本文将分享完整的操作流程,包括证书申请、下载、服务器配置和Flask代码实现。
关于部署个人网站,欢迎查看
https://blog.csdn.net/qq_33163046/article/details/160987186

我的证书信息:

  • 证书类型:DigiCert DV 单域名证书
  • 绑定域名:www.xiaoxiangzai.com.cn
  • 有效期至:2026-08-22

一、阿里云免费SSL证书申请

1.1 进入数字证书管理服务

登录阿里云控制台,搜索"SSL证书"或进入【数字证书管理服务】→【SSL证书管理】。

在这里插入图片描述

选择个人测试证书(免费版),点击"立即购买"。

1.2 确认订单(0元购)

虽然是免费证书,但仍需要走下单流程,应付金额为0元。

在这里插入图片描述

点击"支付"完成0元订单。

1.3 填写证书申请信息

支付成功后,进入证书申请页面,填写以下信息:

在这里插入图片描述

关键配置项:

  • 证书绑定域名:填写你的完整域名,如 www.xiaoxiangzai.com.cn
  • 域名验证方式:选择"自动DNS验证"(推荐,最方便)

⚠️ 注意:自动DNS验证要求域名在阿里云DNS解析管理,如果域名在其他服务商,需要手动添加DNS记录。

1.4 DNS验证

提交申请后,系统会自动生成DNS验证信息:

在这里插入图片描述

如果域名在阿里云管理,系统会自动添加TXT解析记录。验证通过后,点击"验证"按钮。

💡 提示:域名验证成功后,验证记录在证书签发后才能删除,否则会导致签发失败。

1.5 等待签发

验证通过后,等待CA机构审核签发,通常需要几分钟到十几分钟。

在这里插入图片描述

证书状态变为"已签发"后,就可以下载使用了。

1.6 下载证书

点击"下载"按钮,选择适合你服务器类型的证书格式:

在这里插入图片描述

对于Flask应用,选择其他类型(pem/key格式)或Nginx类型都可以。

下载后解压,得到两个核心文件:

在这里插入图片描述

  • www.xiaoxiangzai.com.cn.pem(证书文件)
  • www.xiaoxiangzai.com.cn.key(私钥文件)

二、服务器部署准备

2.1 创建证书目录

mkdir -p /etc/ssl/xiaoxiangzai

2.2 上传证书文件

将下载的两个文件上传到服务器:

# 使用scp或sftp上传
scp www.xiaoxiangzai.com.cn.pem root@your-server:/etc/ssl/xiaoxiangzai/
scp www.xiaoxiangzai.com.cn.key root@your-server:/etc/ssl/xiaoxiangzai/

2.3 设置私钥权限(重要!)

chmod 600 /etc/ssl/xiaoxiangzai/*.key

私钥文件必须设置严格权限,否则可能存在安全风险。


三、Flask HTTPS部署代码

以下是我最终使用的代码,支持:

  • ✅ HTTPS加密访问(浏览器显示安全小锁)
  • ✅ HTTP自动301跳转到HTTPS
  • ✅ 双端口监听(80 + 443)
  • ✅ 后台稳定运行
from flask import Flask, render_template_string, redirect, request
from threading import Thread

app = Flask(__name__)

# 博客首页
@app.route('/')
def index():
    blog_content = """
    <h1>欢迎来到我的个人博客</h1>
    <p> Flask 个人博客 </p>
    <p> 已成功配置 HTTPS 安全访问 </p>
    """
    return render_template_string(blog_content)

# 80 端口 → 专门用于自动跳转到 HTTPS
def run_http():
    http_app = Flask(__name__)

    @http_app.route('/', defaults={'path': ''})
    @http_app.route('/<path:path>')
    def https_redirect(path):
        return redirect(f"https://www.xiaoxiangzai.com.cn/{path}", code=301)

    http_app.run(host='0.0.0.0', port=80, debug=False)

# 主程序启动
if __name__ == '__main__':
    # 启动 80 端口跳转服务
    Thread(target=run_http).start()

    # 启动 443 端口 HTTPS 主站
    app.run(
        debug=False,
        host='0.0.0.0',
        port=443,
        ssl_context=(
            '/etc/ssl/xiaoxiangzai/www.xiaoxiangzai.com.cn.pem',
            '/etc/ssl/xiaoxiangzai/www.xiaoxiangzai.com.cn.key'
        )
    )

在这里插入图片描述

代码要点说明:

  1. 双线程设计:使用Thread同时启动HTTP(80端口)和HTTPS(443端口)服务
  2. 301跳转:HTTP请求永久重定向到HTTPS,有利于SEO
  3. ssl_context:传入证书和私钥路径,启用HTTPS
  4. debug=False:生产环境必须关闭调试模式

四、防火墙端口放行

确保服务器放行80和443端口:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

如果是云服务器,还需要在安全组中添加相应端口规则。

在这里插入图片描述


五、启动与维护

5.1 关闭旧进程

sudo pkill -f app.py

5.2 后台启动(推荐)

sudo nohup python3 app.py > app.log 2>&1 &

使用nohup可以让程序在关闭终端后继续运行。

5.3 查看运行状态

# 查看进程
ps aux | grep app.py | grep -v grep

# 查看日志
tail -f app.log

六、部署效果验证

完成部署后,访问以下地址验证:

访问地址 预期结果
https://www.xiaoxiangzai.com.cn 正常访问,浏览器显示安全小锁 🔒
http://www.xiaoxiangzai.com.cn 自动301跳转到HTTPS

七、常见问题与解决方案

Q1: 提示权限不足

# 使用sudo运行
sudo python3 app.py

Q2: 端口被占用

# 查找占用443端口的进程
sudo lsof -i :443
# 结束进程
sudo kill -9 <PID>

Q3: 证书路径错误

确保证书路径使用绝对路径,且文件确实存在:

ls -la /etc/ssl/xiaoxiangzai/

Q4: 防火墙拦截

检查防火墙和安全组规则,确保80/443端口已开放。


八、总结

本文完整记录了从阿里云申请免费SSL证书到Flask部署的全过程:

  1. 证书申请:阿里云免费DV证书,0元申请,自动DNS验证
  2. 证书部署:上传证书到服务器,设置安全权限
  3. Flask配置:双线程实现HTTP跳转+HTTPS服务
  4. 运维管理:后台运行、日志查看、进程管理

免费证书虽然有效期只有3个月,但对于个人项目完全够用。到期后可以重新申请部署,也可以考虑购买长期证书。

希望这篇教程对你有帮助!如果有问题欢迎在评论区交流。


参考链接:


📌 版权声明:本文为博主原创文章,转载请注明出处。
📝 更新时间:2026-05-21

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐