ssl - 在使用 openresty 实现 ssl 时,AWS EC2 实例出现 sni-support-required-for-valid-ssl 错误
问题描述
我已经建立了一个网络应用程序app.mywebapp.com
。我计划为我的用户实施白标。
用户示例网站:userwebsite.com
. 我想将他们的子域指向我的应用程序。
示例:dashboard.userwebsite.com
应该指向app.mywebapp.com
我在我的用户 DNS 设置中添加了 CNAME 记录
我正在使用通过反向代理openresty
实现动态SSL
证书处理。
我的 webapp 在一个 AWS EC2 实例上运行,SSL 由负载均衡器处理。
我创建了另一个带有负载均衡器的 EC2 实例来处理来自我的用户网站的 SSL 请求。
当我在浏览器中键入 EC2 实例公共 DNS 时,我收到不安全的 SSL 错误消息
"sni-support-required-for-valid-ssl" certificate is not trusted
这是nginx.conf
用于通过以下方式处理 SSL 的文件openresty
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 分钟,但可以节省你几天的调试时间,特别是如果你是第一次使用。
推荐阅读
- openssl - 生成自签名证书时 Req 中的 OpenSSL 错误
- git - 从 Git 公共仓库隐藏特定文件
- python - 了解时间戳在 Keras LSTM 中的作用
- node.js - 您可以使用 node-libcurl 设置原始标头吗?
- python - PyQt5 QSortFilterProxyModel 按适当的数据类型(int、float、datetime、string 等)对列进行排序
- python-3.x - Pandas 将多个目录中的 Excel 文件合并到第三个目录中
- python - 计算两个 UNIX 时间戳之间的秒数
- javascript - 页面上任意数量的谷歌图表,不同的数据集和一个回调
- x11 - 检测 Mod 键单独按下(键按下然后释放)
- javascript - 我正在尝试从 php 播放视频,但无法这样做