ssl - 使用 openresty 实现 ssl 时 AWS EC2 实例出现 sni-support-required-for-valid-ssl 错误

标签 ssl nginx amazon-ec2 reverse-proxy openresty

我构建了一个网络应用 app.mywebapp.com。我计划为我的用户实现白标。

用户示例网站:userwebsite.com。我想将他们的子域指向我的应用程序。

示例:dashboard.userwebsite.com 应该指向 app.mywebapp.com

我已经在我的用户 DNS 设置中添加了 CNAME 记录

我正在使用 openresty 通过反向代理实现动态 SSL 证书处理。

我的 webapp 在一个 AWS EC2 实例上运行,SSL 由负载均衡器处理。

我已经创建了另一个带有负载均衡器的 EC2 实例来处理来 self 的用户网站的 SSL 请求。

当我在浏览器中键入 EC2 实例公共(public) DNS 时,我收到不安全的 SSL 错误消息

“sni-support-required-for-valid-ssl”证书不受信任

这是通过openresty处理SSL的nginx.conf文件

    user  www-data;
    events {
      worker_connections 1024;
    }

    http {
      lua_shared_dict auto_ssl 1m;
      lua_shared_dict auto_ssl_settings 64k;
      resolver 8.8.8.8 ipv6=off;

      init_by_lua_block {
        auto_ssl = (require "resty.auto-ssl").new()
        auto_ssl:set("allow_domain", function(domain)
          return true
        end)
        auto_ssl:init()
      }

      init_worker_by_lua_block {
        auto_ssl:init_worker()
      }

      server {
        listen 443 ssl;
        ssl_certificate_by_lua_block {
          auto_ssl:ssl_certificate()
        }
        ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt;
        ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key;

    proxy_ssl_server_name on;

    location / {
            proxy_set_header Host app.mywebapp.com;
            proxy_set_header Referer $host$uri;
            proxy_buffer_size          128k;
            proxy_buffers              4 256k;
              proxy_busy_buffers_size    256k;

            proxy_set_header User-Agent $http_user_agent;
            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header Accept-Encoding "";
            proxy_set_header Accept-Language $http_accept_language;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto  https;
            proxy_read_timeout 5m;

            proxy_pass https://app.mywebapp.com;
        }
      }

      server {
        listen 80;
        location /.well-known/acme-challenge/ {
          content_by_lua_block {
            auto_ssl:challenge_server()
          }
        }

    location /{
    return 301 https://$host$request_uri;
    }

      }

      server {
        listen 127.0.0.1:8999;
        client_body_buffer_size 128k;
        client_max_body_size 128k;

        location / {
          content_by_lua_block {
            auto_ssl:hook_server()
          }
        }
      }
    }

最佳答案

发生这种情况是因为由于某种原因,您的服务器未能获得新证书。我无法完全调试您的设置,但我可以向您保证 https://github.com/GUI/lua-resty-auto-ssl 处的文档可以,但可能不容易调试。

提示;看你的日志

您的问题不完整,但大多数时候,在使用 OpenResty 时,您应该查看错误日志文件,看看它会告诉您什么。但大多数时候,这些都是常见错误:

请求过多

GUI/lua-resty-auto-ssl 将非常非常快地重试。这意味着如果您部署了错误的配置,您很可能会达到 Let's Encript 限制。如果您正在进行大量调试,真的建议您使用另一个子域以免主域饱和

目录权限

如果openresty不能写,就会失败。但是在某些情况下,你的 OpenResty/Nginx 仍然可以工作,但是 Deydrated 会失败

重定向问题和/或没有 GUI/lua-resty-auto-ssl 在确切的地方

这很难调试,但解释起来很简单,在实现重定向(如强制 HTTP 到 HTTPS)时逐步执行,因为您可能可以获得新证书,然后不更新它。

“确切地点”是指

  • 如果 Let's encrypt 将在端口 80 上尝试,您需要在那里有 GUI/lua-resty-auto-ssl 片段
  • 如果 Let's encrypt 将在域 example.com 上尝试,您需要在那里有 GUI/lua-resty-auto-ssl 片段

最后的评论:

如果可以,请尝试使用GUI/lua-resty-auto-ssl 中的最小示例,然后您所做的每个更改,再试一次,一步一步,并观看您的日志文件。如果你这样做,可能会多花 30~60 分钟,但可以节省你几天的调试时间,特别是如果你是第一次使用。

关于ssl - 使用 openresty 实现 ssl 时 AWS EC2 实例出现 sni-support-required-for-valid-ssl 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224374/

相关文章:

hadoop - 无法在AWS EC2实例上启动HDP2.6.1沙箱的大多数服务

amazon-web-services - 将Docker容器放入AWS EC2实例的动机

.net - 当我在 azure 上添加 HTTP(S) 时 ssl 安全吗?

ruby-on-rails - Rails 不通过 SSL 呈现 Assets (404 未找到错误)

python - 为什么使用 Nginx 运行 Flask 需要 WSGI 包装器?

node.js - AWS EC2 上的 Nginx、Socket.io 无访问控制允许请求资源中存在源

python - AWS EC2 电子邮件转发 : Forward Incoming Email to an External Destination with Lambda

ssl - Heroku UCC SSL 证书不工作

visual-studio-2008 - 如何访问iframe中页面中的字段?

nginx - 如何在Kubernetes上访问简单的Nginx部署?