使用Gunicorn/Flask部署HTTPS服务遇ERR_CERT_AUTHORITY_INVALID问题求解
问题描述
我出于测试目的,希望快速通过HTTPS部署基于Flask开发的API,当前使用Gunicorn在443端口部署,执行命令如下:
gunicorn --certfile=server.crt --keyfile=server.key --bind 0.0.0.0:443 wsgi:app
当以HTTPS部署的React应用向该API的某路由发送POST请求时,浏览器控制台报错:
POST https://1.2.3.4/foo net::ERR_CERT_AUTHORITY_INVALID
我的密钥和证书通过以下openssl命令生成:
openssl genrsa -aes128 -out server.key 2048 openssl rsa -in server.key -out server.key openssl req -new -days 365 -key server.key -out server.csr openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
请问是否存在无需使用nginx/caddy等反向代理、也无需用户手动信任自签名证书的方案,来解决浏览器抛出的该错误?
解决方案
不存在这样的方案。
浏览器的安全机制要求HTTPS证书必须由**受信任的根证书颁发机构(CA)**签名,否则会直接拦截连接并抛出证书无效的错误。你当前使用的是自签名证书,本身就不在浏览器的信任列表里,而绕过这个限制的途径只有两种:
- 让用户手动将自签名证书添加到浏览器的信任列表中;
- 使用受公共CA信任的合法证书(比如Let's Encrypt的免费证书),但这种方式要么需要域名(因为CA不会为裸IP颁发信任证书),要么依然需要配置反向代理或证书管理工具来自动续期,而你明确排除了反向代理的选项。
如果只是纯本地测试场景,可以临时关闭浏览器的安全校验(比如Chrome使用--ignore-certificate-errors启动参数),但这仅适用于个人测试,不能用于面向用户的场景,本质上还是属于手动绕过校验的范畴,并非无需用户操作的方案。
内容的提问来源于stack exchange,提问作者gameveloster
相关产品推荐
相关产品推荐

