如何通过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
相关产品推荐
相关产品推荐

