如何使用.local域名运行带SSL的本地Django开发服务器并解决证书错误
本地Django开发环境有效SSL证书解决方案
你遇到的ERR_CERT_AUTHORITY_INVALID错误,是因为runserver_plus默认生成的是未被系统信任的自签名证书,以下是两种可落地的解决方法:
方案一:使用mkcert生成本地受信任证书(推荐,适配子域名场景)
这是本地开发最常用的方案,生成的证书会被系统、所有浏览器自动信任,同时支持通配符子域名,完全适配你的跨子域名请求需求:
- 第一步:根据你的操作系统安装mkcert(macOS可通过
brew install mkcert安装,Ubuntu/Debian可通过apt install mkcert安装,Windows可通过scoop安装) - 第二步:执行
mkcert -install,该命令会自动将mkcert的根证书写入系统和浏览器的信任列表,后续所有mkcert签发的证书都会被本地环境默认信任 - 第三步:为你的域名生成证书,执行命令时可同时加入主域名和通配符子域名:
执行完成后会在当前目录生成mkcert mysite.local "*.mysite.local"mysite.local.pem证书文件和mysite.local-key.pem私钥文件 - 第四步:使用生成的证书启动runserver_plus:
启动后访问对应域名不会再出现证书错误。./manage.py runserver_plus --cert-file=./mysite.local.pem --key-file=./mysite.local-key.pem
方案二:手动信任现有自签名证书(无需额外工具)
如果你不想安装新的工具,也可以直接信任runserver_plus生成的自签名证书:
- 临时使用:直接在浏览器报错页面点击「高级」-「继续前往mysite.local(不安全)」即可临时访问,该配置仅对当前浏览器生效,清除缓存或更换浏览器后需要重新操作
- 永久生效:将
/tmp/mysite.cert证书文件手动导入到系统根证书信任库:- macOS:双击证书文件打开钥匙串访问,找到对应证书后设置为「始终信任」
- Windows:双击证书文件,选择安装到「受信任的根证书颁发机构」存储区
- Linux:将证书文件复制到
/usr/local/share/ca-certificates/目录,执行sudo update-ca-certificates生效
注意:如果需要跨多个子域名发起请求,要确保所有用到的子域名都被加入证书的主体备用名称(SAN)字段,使用mkcert生成证书时在命令后追加对应的域名或通配符即可,避免出现证书不匹配的问题。
内容的提问来源于stack exchange,提问作者Ben Davis
相关产品推荐
相关产品推荐

