You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过librelp以编程方式配置RELP服务器强制使用TLS

问题:配置librelp RELP服务器强制TLS传输

我正在使用librelp头文件创建RELP服务器,以接收自研客户端发送的消息。该库文档极为匮乏,因此我无法正确配置服务器的TLS。我尝试了以下两种配置方式,但不确定它们是独立方案还是互补方案:

方法1:使用TlsConfigCmd

(无关代码已省略)
main.cpp

<...>
relpSrv_t* pRelpSrv;
relpSrvSetEnableTLS2(pRelpSrv);
relpSrvSetTlsConfigCmd(pRelpSrv, GetFileChars("tls-cmd")); // GetFileChars读取文件内容到char*
relpSrvSetAuthMode(pRelpSrv, (char*)"certvalid");
<...>
relpEngineRun(pRelpSrv);

tls-cmd

type="omrelp"
target="localhost" port="10000"
tls="on"
tls.caCert="ca-cert.pem"
tls.myCert="server-cert.pem"
tls.myPrivKey="server-key.pem"
tls.authMode="name"
tls.tlslib="openssl"
tks.tlscfgcmd="MinProtocol=TLSv1.2"

方法2:使用SetCert/Setkey

(无关代码已省略)

<...>
relpSrv_t* pRelpSrv;
relpSrvSetOwnCert(pRelpSrv, GetFileChars("server-cert.pem"));
relpSrvSetCACert(pRelpSrv, GetFileChars("ca-cert.pem"));
relpSrvSetPrivKey(pRelpSrv, GetFileChars("server-key.pem"));
relpSrvSetAuthMode(pRelpSrv, (char*)"certvalid");
<...>
relpEngineRun(pRelpSrv);

但无论使用哪种方法,客户端仍能发送消息,且通过relpEngineSetSyslogRcv(pRelpEngine, &MyCallback);设置的syslog接收回调仍会被触发。请问如何配置RELP服务器以强制要求消息通过TLS传输?


解决方案

两种配置方式的关系

两种方案是独立互斥的:

  • relpSrvSetTlsConfigCmd通过配置字符串/文件批量设置TLS参数,适合复用现有配置模板;
  • 直接调用relpSrvSetOwnCert/relpSrvSetCACert/relpSrvSetPrivKey是逐参数设置,更灵活可控。
    两者无需同时使用,选择其一即可。

强制TLS的核心配置

当前问题在于仅开启了TLS支持,但未明确拒绝明文连接。需添加以下关键配置:

方法2(推荐,直观可控)

在证书和密钥配置后,添加relpSrvSetRequireTLS(pRelpSrv, 1);,强制所有连接必须使用TLS:

<...>
relpSrv_t* pRelpSrv;
relpSrvSetOwnCert(pRelpSrv, GetFileChars("server-cert.pem"));
relpSrvSetCACert(pRelpSrv, GetFileChars("ca-cert.pem"));
relpSrvSetPrivKey(pRelpSrv, GetFileChars("server-key.pem"));
relpSrvSetAuthMode(pRelpSrv, (char*)"certvalid");
// 新增:强制所有连接使用TLS
relpSrvSetRequireTLS(pRelpSrv, 1);
<...>
relpEngineRun(pRelpSrv);

方法1

在tls-cmd配置文件中添加tls.require="on",明确要求强制TLS:

type="omrelp"
target="localhost" port="10000"
tls="on"
tls.require="on"
tls.caCert="ca-cert.pem"
tls.myCert="server-cert.pem"
tls.myPrivKey="server-key.pem"
tls.authMode="name"
tls.tlslib="openssl"
tks.tlscfgcmd="MinProtocol=TLSv1.2"

额外验证要点

  • 检查证书文件路径是否正确,确保服务器能读取到指定的证书和密钥文件;
  • 确认客户端未配置降级到明文连接的参数;
  • 可通过抓包工具验证连接是否使用TLS加密。

内容的提问来源于stack exchange,提问作者TheRamblingLank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:03:21