一个 TCPTLS 侦听器 SIPSorcery 上的多个连接
Multiple connection on one TCPTLS listener SIPSorcery
如何在 SIPSorcery 中使用一个单一的 SIPTLSChannel,连接使用不同证书但本地端口相同的不同远程服务器?
据我所知,SIPTLSChannel在构造函数中将X509Certificate2作为参数,并且无法在此通道中加载更多证书,也无法使用相同的LocalEndPoint但不同的证书添加多个SIPTLSChannel实例,因为 SIPTransport 将报告此 EndPoint 确实已经存在。
以下示例将抛出 "Already exist exception":
SIPTransport transport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), true);
var localEndPoint = new IPEndPoint(IPAddress.Loopback, 8443);
var cert1 = new X509Certificate2 ("c:\mycerts\*****.cer");
var channel1 = new SIPTLSChannel(cert1, localEndPoint);
transport.AddSIPChannel(channel1);
var cert2 = new X509Certificate2 ("c:\mycerts\*****.cer");
var channel2 = new SIPTLSChannel(cert2, localEndPoint);
transport.AddSIPChannel(channel2);
希望这个答案迟到总比不到好。
在 OP 的代码示例中,提供的证书是客户端连接到侦听端口时将使用的证书。换句话说,它是一个服务器证书,可以提供给连接的客户端。根据客户端的不同,证书的通用名称将需要与创建 TLS 通道的主机名相匹配,否则客户端将拒绝 SSL 协商并显示 RemoteCertificateNameMismatch
.
等错误
要建立传出 SSL 连接,无需指定证书(sipsorcery 库当前不支持客户端证书身份验证)。需要指定的是预期的证书名称。需要使用的 SendRequest
重载是:
void Send(IPEndPoint dstEndPoint, byte[] buffer, string serverCertificateName)
实际上,通常不必担心要使用哪个 Send
重载。相反,步骤是:
- 创建一个 SIPTLSChannel,如问题示例所示,
- 使用需要 TLS 传输的 URI 创建 SIP 请求:
- 啜饮:100@sipsorcery.com
- sip:100@sipsorcery.com;传输=tls
- 使用请求调用
Send
,SIP 传输 class 负责创建传出 TCP 连接和 SSL 协商。
如何在 SIPSorcery 中使用一个单一的 SIPTLSChannel,连接使用不同证书但本地端口相同的不同远程服务器?
据我所知,SIPTLSChannel在构造函数中将X509Certificate2作为参数,并且无法在此通道中加载更多证书,也无法使用相同的LocalEndPoint但不同的证书添加多个SIPTLSChannel实例,因为 SIPTransport 将报告此 EndPoint 确实已经存在。
以下示例将抛出 "Already exist exception":
SIPTransport transport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), true);
var localEndPoint = new IPEndPoint(IPAddress.Loopback, 8443);
var cert1 = new X509Certificate2 ("c:\mycerts\*****.cer");
var channel1 = new SIPTLSChannel(cert1, localEndPoint);
transport.AddSIPChannel(channel1);
var cert2 = new X509Certificate2 ("c:\mycerts\*****.cer");
var channel2 = new SIPTLSChannel(cert2, localEndPoint);
transport.AddSIPChannel(channel2);
希望这个答案迟到总比不到好。
在 OP 的代码示例中,提供的证书是客户端连接到侦听端口时将使用的证书。换句话说,它是一个服务器证书,可以提供给连接的客户端。根据客户端的不同,证书的通用名称将需要与创建 TLS 通道的主机名相匹配,否则客户端将拒绝 SSL 协商并显示 RemoteCertificateNameMismatch
.
要建立传出 SSL 连接,无需指定证书(sipsorcery 库当前不支持客户端证书身份验证)。需要指定的是预期的证书名称。需要使用的 SendRequest
重载是:
void Send(IPEndPoint dstEndPoint, byte[] buffer, string serverCertificateName)
实际上,通常不必担心要使用哪个 Send
重载。相反,步骤是:
- 创建一个 SIPTLSChannel,如问题示例所示,
- 使用需要 TLS 传输的 URI 创建 SIP 请求:
- 啜饮:100@sipsorcery.com
- sip:100@sipsorcery.com;传输=tls
- 使用请求调用
Send
,SIP 传输 class 负责创建传出 TCP 连接和 SSL 协商。