首页 > 解决方案 > 通过非 HTTP 协议代理的 TLS 终止(加密/解密)

问题描述

指示性架构

所讨论的协议是 MRCP v2 协议。

问题概述:
客户端发送 MRCP/TLS 请求,而服务器无法理解这些请求,因为它没有执行 TLS 握手或加密的能力。我希望 HAProxy 或任何其他代理(Nginx?)将解密这些 TLS 数据包,并将其发送到服务器,服务器可以响应,然后 HAProxy 可以加密并将其发送回客户端。

如果可能的话,我还想要一种将其扩展到 SIP 协议的方法。根据我对 HAProxy 的了解,它不能对 TCP(第 4 层)进行 TLS 终止,只能对 HTTP(第 7 层)进行终止。有什么解决方法/替代方法吗?

标签: sslnginxreverse-proxyhaproxy

解决方案


您正在寻找 NGINX 及其ngx_stream_ssl_module。它允许您加密任意 TCP 流量(不必是 HTTP)。无需特殊安装。只需安装 NGINX 并将其放在您的服务器上,而不是 HAProxy 或任何 TLS 终结器。配置很简单:

stream {

    ...

    server {
        listen              12345 ssl;

        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /usr/local/nginx/conf/cert.pem;
        ssl_certificate_key /usr/local/nginx/conf/cert.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        ...
    }
}

客户端 -> NGINX(流 TLS 终止)-> 任何 TCP 协议。

NGINX 只会做 TLS 加密而不检查底层协议。


推荐阅读