【问题标题】:TLS termination (encryption/decrytion) via proxy for non HTTP protocol通过非 HTTP 协议代理的 TLS 终止(加密/解密)
【发布时间】:2021-02-28 15:51:24
【问题描述】:

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

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

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

【问题讨论】:

  • 请注意,对于 SIP,这种简单的方法可能行不通。连接可以从双方开始,因此非 TLS 客户端启动的 TCP 连接必须以某种方式封装在 TLS 中。此外,还可能需要调整 SIP URL 和标头(如 Contact、Via、...)以在 TLS 和普通 TCP 之间进行转换。

标签: ssl nginx reverse-proxy haproxy


【解决方案1】:

您正在寻找 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 加密而不检查底层协议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2014-03-31
    • 2011-07-05
    • 1970-01-01
    • 2010-12-28
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多