如何在Django开发服务器中使用LetsEncrypt/Certbot配置SSL?
嘿,我完全懂你想在Django开发服务器上配置SSL来验证功能可用性的需求——毕竟在推去生产前先把功能跑通是很稳妥的做法。Certbot确实主要针对Apache、Nginx这类生产级Web服务器,但开发环境里咱们不用那么复杂,Django自带的开发服务器本身就支持SSL配置,几步就能搞定:
1. 生成自签名SSL证书
开发环境不需要CA颁发的正规证书,用OpenSSL生成一个自签证书就够了。打开终端执行以下命令:
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes
执行过程中会让你填写一些信息(比如国家、组织名),随便填就行,开发测试不需要严格合规。这个命令会生成一个有效期1年的私钥(server.key)和证书(server.crt),-nodes参数是让私钥不设置密码,避免每次启动都要输入。
2. 启动带SSL的Django开发服务器
Django的runserver命令支持直接指定SSL证书和密钥,不需要修改任何项目代码。运行以下命令启动服务器:
python manage.py runserver --cert server.crt --key server.key
启动成功后,你就可以通过https://localhost:8000(或者你指定的自定义端口)访问你的Django项目了。
3. 处理浏览器的安全警告
因为是自签证书,浏览器会弹出“此连接不安全”的警告,这是正常现象。你可以选择手动信任这个证书(不同浏览器操作略有不同,一般在高级选项里能找到“继续访问”的入口),或者直接忽略警告进入页面——毕竟只是开发测试,不会有实际的安全风险。
可选:模拟生产级反向代理+SSL(进阶)
如果你想更贴近生产环境的配置,也可以用Nginx或Caddy做反向代理,然后用Certbot给代理服务器配置测试证书(比如用Certbot的--test-cert参数生成测试环境证书)。不过这个方案相对复杂,如果你只是单纯验证Django的SSL功能,前面的简易方案已经完全够用。
内容的提问来源于stack exchange,提问作者Cathal

