- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在两个 VPS 中有大约 100 个类似的网站。我想使用 HAProxy 动态切换流量,但同时我想添加一个 SSL 证书。
我想使用添加一个变量来调用每个网站的特定证书。例如:
frontend web-https
bind 0.0.0.0:443 ssl crt /etc/ssl/certs/{{domain}}.pem
reqadd X-Forwarded-Proto:\ https
rspadd Strict-Transport-Security:\ max-age=31536000
default_backend website
我还想检查 SSL 证书是否真的可用,如果不可用,则通过重定向切换到 HTTP。
使用 HAProxy 可以吗?
最佳答案
这可以做到,但 TLS (SSL) 不允许您按照您设想的方式进行。
首先,HAProxy 允许您指定默认证书和附加证书的目录。
来自documentation for the crt
keyword
If a directory name is used instead of a PEM file, then all files found in that directory will be loaded in alphabetic order unless their name ends with '.issuer', '.ocsp' or '.sctl' (reserved extensions). This directive may be specified multiple times in order to load certificates from multiple files or directories. The certificates will be presented to clients who provide a valid TLS Server Name Indication field matching one of their CN or alt subjects. Wildcards are supported, where a wildcard character '*' is used instead of the first hostname component (eg: *.example.org matches www.example.org but not www.sub.example.org).
If no SNI is provided by the client or if the SSL library does not support TLS extensions, or if the client provides an SNI hostname which does not match any certificate, then the first loaded certificate will be presented. This means that when loading certificates from a directory, it is highly recommended to load the default one first as a file or to ensure that it will always be the first one in the directory.
因此,您所需要的只是一个包含 pem 文件中每个证书/链/ key 的目录,以及像这样修改您的配置:
bind 0.0.0.0:443 ssl crt /etc/haproxy/my-default.pem crt /etc/haproxy/my-cert-directory
请注意,您还应该添加 no-sslv3
.
I want to use add a variable to call te specific certificate for each website
如文档中所述,如果浏览器发送服务器名称标识 (SNI),则 HAProxy 将自动使用适当的证书与浏览器协商。
因此,可配置的证书选择不是必需的,但更重要的是,这是不可能的。 SSL/TLS 不能那样工作(任何地方)。在浏览器成功协商安全通道之前,您不知道浏览器将请求哪个网站,因为浏览器尚未发送请求。
如果浏览器不使用 SNI——这个问题应该几乎完全不相关了——或者如果文件中没有与 SNI 中显示的主机名相匹配的证书——那么默认证书用于与浏览器协商。
I'd like also check if the ssl is real available and in case is not available switch to http with a redirect
这也是不可能的。请记住,首先协商加密,然后才是浏览器发送的 HTTP 请求。
因此,用户永远不会看到您的重定向,除非他们绕过浏览器的安全警告——他们必须看到,因为默认证书中的主机名与浏览器希望在证书中看到的主机名不匹配。
在这一点上,强制他们返回 http 没有什么意义,因为通过绕过浏览器安全警告,他们已经建立了一个连接——同时——不受信任但仍然加密。连接在技术上是安全的,但用户在地址栏中有一个红色的×,因为浏览器正确地认为证书无效(由于主机名不匹配)。但在用户坚持绕过警告的情况下,浏览器仍然使用无效证书建立安全通道。
如果你真的想在所有这些之后重定向,你需要看一下 layer 5 fetches .您需要验证 Host
header 是否与 SNI 或默认证书匹配,如果您的证书是通配符,您也需要适应它,但这仍然只会发生 在用户绕过安全警告之后。
想象一下,如果事情如此简单,没有有效证书的 Web 服务器可以通过简单地重定向流量来劫持流量,而不需要浏览器要求服务器的证书有效(或用户故意采取行动来绕过警告),并且它应该变得显而易见为什么你最初的想法不仅行不通,而且实际上不应该行得通。
另请注意,从配置目录加载的证书都是在启动时加载的。如果您需要 HAProxy 发现新的或丢弃旧的,则需要热重启 HAProxy(通常是 sudo service haproxy reload
)。
关于ssl - 多域的 HAProxy 动态 SSL 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41315227/
我只是看了一下HAproxy的源码来了解它是如何实现的,我看到了一个有趣的数据结构,叫做Elastic Binary Search tree .它似乎与二叉搜索树非常相似。但我想知道为负载均衡器选择这
我正在 AWS 上部署 NodeJS 应用程序。目前的结构是 ELB 1 个 HAProxy 实例 2+ 个运行 NodeJS 应用程序的 EC2 实例 Single HA Proxy 实例确保
更改配置文件时,我使用以下命令重启 HAProxy: /usr/local/sbin/haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $
我有两个 HAProxy 实例。两个实例都启用了统计信息并且工作正常。 我正在尝试将两个实例的统计信息合并为一个,以便我可以使用单个 HAProxy 来查看前端/后端统计信息。我试图让两个 hapro
在重新启动 HAProxy 服务之前,有什么方法可以验证 HAProxy haproxy.cfg 文件吗?例如:较大的 haproxy.cfg 文件中可能存在小的拼写/语法错误。我搜索了多个论坛,但找
我希望在 HAProxy 中有一个限制规则,限制用户加载任何特定路径的速率,但我不知道在 HAProxy 中连接字符串的方法(至少在生成棍子 table 的 key )。所以我想要的是 tcp-req
我正在构建一个具有多个前端和后端的 haproxy 配置文件。它将有数百行长,我宁愿将其分成单独的文件,用于我想要负载平衡的每个不同网站。 HAProxy 是否提供从主 haproxy.cfg 文件链
我正在使用以下命令启动 HA 代理: sudo etc/init.d/haproxy start 我使用以下方法停止 HA 代理: sudo etc/init.d/haproxy stop 我如何为
我使用 haproxy 和 stunnel 处理 SSL(并使用代理模式来保留 haproxy 的原始 IP)。 我有几个 acl 测试,根据域、 header 或路径重定向到不同的后端。 问题是,无
我看到系统日志中弹出这些消息: Mar 10 12:51:35 db1 kernel: [5851729.958138] type=1400 audit(1457614295.823:2925931)
我在 haproxy.cfg 的默认部分有这个选项: option dontlog-normal option dontlognull 但是在日志文件中仍然有这种类型的日志行: localhost
我们使用以下方法将 URL 映射文件加载到 HAProxy 中: http-request redirect location %[capture.req.uri,map(/etc/haproxy/r
我目前正在重构我们在生产服务器上使用的 haproxy 配置,以从中央服务器转发 TCP 流量。目标是让一切都与 docker 容器一起工作,以帮助提高部署可靠性。 到目前为止一切都进展顺利,但现在我
我在我的 HAProxy 统计报告中看到 Sessions Curr、Max、Limit 均为 2000。 如何将最大和限制增加到 2000 以上? 最佳答案 使用maxconn Sets the m
我环顾四周,试图找到一个 HAProxy 匹配 SNI 通配符的示例,我的搜索提出了类似标题但与证书无关的问题。 具体来说,我需要使用 acme/letsencyrpt 为 dvsni 路由 nonc
我们有一个 haproxy 实例,我们的一个应用程序仅支持 TLSv1.0。当它尝试通过此 haproxy 连接时,它会因握手失败而失败。 如何在此 haproxy 实例上启用 TLSv1.0 支持。
如何构建HAPROXY配置文件来阻止特定HTTP方法的请求? 我们开始发现许多攻击使用我们的应用程序不支持的方法。我们宁愿拒绝负载均衡器的流量,也不愿让我们的应用程序陷入困境。 最佳答案 尝试将其放入
我使用 haproxy 1.6.4 作为 TCP(不是 HTTP)代理。我的客户正在发出 TCP 请求。他们不等待任何响应,他们只是发送数据并关闭连接。 当所有后端节点都关闭时,haproxy 的行为
我需要使用先前配置的 HAproxy v1.8 来管理服务器。更新到 v2.4 后,我注意到有关不再使用 regrep 的错误: [ALERT] (1574) : parsing [/etc/h
我们使用 HAProxy 将传入的 TCP 连接转发到使用原始 TCP 的单独服务器。我们看到的问题是客户端连接被接受然后关闭而不是立即被拒绝。由于我们启用了健康检查,HAProxy 有什么方法可以解
我是一名优秀的程序员,十分优秀!