You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除AWS Ubuntu服务器自签名SSL证书并解决访问警告问题

问题:消除AWS Ubuntu服务器上Flask应用的Chrome SSL安全警告

我在AWS Ubuntu服务器上部署了一个简单的Flask Python Web应用,遵循了Miguel Grinberg的教程。但通过Chrome浏览器访问时遇到问题:访问站点会出现安全警告,虽可点击“继续前往...”成功访问,但我希望消除该警告。

经排查,问题源于服务器上的自签名SSL证书,创建该证书的命令如下:

$ mkdir certs
$ openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
  -keyout certs/key.pem -out certs/cert.pem

对应的Nginx配置如下:

server {
    # listen on port 443 (https)
    listen 443 ssl;
    server_name _;

    # location of the self-signed SSL certificate
    ssl_certificate /home/ubuntu/microblog2/certs/cert.pem;
    ssl_certificate_key /home/ubuntu/microblog2/certs/key.pem;

    location / {
        # forward application requests to the gunicorn server
        proxy_pass http://127.0.0.1:8000;
        proxy_redirect off;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    }

    location /static {
        # handle static files directly, without forwarding to the application
        alias /home/ubuntu/microblog2/static;
        expires 30d;
    }
}

我尝试删除或注释ssl_certificate相关配置并重新加载Nginx,但无法访问站点;恢复配置后可访问,但警告仍存在。请问该如何处理此问题?


解决方案

嘿,这个问题我碰到过不少次,本质就是自签名证书不被主流浏览器信任——毕竟它没有经过受信任的第三方证书机构(CA)背书,浏览器肯定会跳出来警告你“不安全”。要彻底解决这个问题,分两种场景给你方案:

👉 生产环境:用Let's Encrypt免费可信证书(强烈推荐)

这是目前最主流的免费SSL解决方案,证书由全球受信任的CA签发,所有浏览器都会直接认可,而且还能自动续期,完全不用操心。步骤很简单:

  1. 先安装Certbot工具和Nginx插件:
sudo apt update
sudo apt install certbot python3-certbot-nginx
  1. 运行Certbot自动配置Nginx:
sudo certbot --nginx

跟着提示走就行,注意你的服务器必须有一个已经解析到公网IP的域名,而且80、443端口要对外开放(AWS安全组得放行这两个端口)。Certbot会自动替换你当前的自签名证书,还会帮你配置好自动续期,以后证书到期不用手动操作。

👉 测试/内部环境:手动把证书加入Chrome信任列表

如果只是自己测试用,不想搞域名,那可以手动让Chrome信任你的自签名证书,但这个方法只在你自己的浏览器生效,其他人访问还是会看到警告:

  1. 打开Chrome访问你的站点,点击地址栏的「不安全」提示,选择「证书」选项。
  2. 在弹出的证书窗口里切到「详细信息」标签,点击「复制到文件」,按向导把证书导出成.crt格式的文件。
  3. 打开Chrome设置,搜索「管理证书」,进入「受信任的根证书颁发机构」标签,点击「导入」,选择刚才导出的证书,勾选「信任该证书用于标识网站」,完成导入后重启Chrome,警告就没了。

📌 为什么删除SSL配置后无法访问?

看你的Nginx配置,只监听了443端口(HTTPS),如果注释掉SSL相关配置,Nginx没法处理HTTPS请求,而你又没配置80端口的HTTP监听,自然就访问不了。如果非要用HTTP(不推荐生产环境),得加一个监听80端口的server块:

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_redirect off;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    }

    location /static {
        alias /home/ubuntu/microblog2/static;
        expires 30d;
    }
}

不过HTTP是明文传输,数据容易被劫持,生产环境千万别这么干。

内容的提问来源于stack exchange,提问作者tktktk0711

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:40:28