C# 一个TCPTLS侦听器SIPSorcery上的多个连接

C# 一个TCPTLS侦听器SIPSorcery上的多个连接,c#,sip,C#,Sip,如何在SIPSorcery中使用一个SIPTLSChannel连接到使用不同证书但使用相同本地端口的不同远程服务器 据我所见,SIPTLSChannel将X509Certificate2作为构造函数中的参数,无法在此通道中加载更多证书,也无法使用相同的LocalEndPoint但不同的证书添加多个SIPTLSChannel实例,因为SIPTransport将报告此端点已经存在 以下示例将抛出“已存在异常”: 希望迟做总比不做好 在OP的代码示例中,提供的证书是客户端连接到侦听端口时将使用的证书。

如何在SIPSorcery中使用一个SIPTLSChannel连接到使用不同证书但使用相同本地端口的不同远程服务器

据我所见,SIPTLSChannel将X509Certificate2作为构造函数中的参数,无法在此通道中加载更多证书,也无法使用相同的LocalEndPoint但不同的证书添加多个SIPTLSChannel实例,因为SIPTransport将报告此端点已经存在

以下示例将抛出“已存在异常”:


希望迟做总比不做好

在OP的代码示例中,提供的证书是客户端连接到侦听端口时将使用的证书。换句话说,它是一个服务器证书,将被提供给连接客户端。根据客户端的不同,证书的通用名称将需要与创建TLS通道的主机名匹配,或者客户端将拒绝SSL协商,并出现类似
RemoteCertificateNameMismatch
的错误

要建立传出SSL连接,无需指定证书(sipsorcery库当前不支持客户端证书身份验证)。需要指定的是预期的证书名称。需要使用的
SendRequest
重载为:

void Send(IPEndPoint dstEndPoint, byte[] buffer, string serverCertificateName)
实际上,通常不必担心使用哪个
发送
重载。相反,这些步骤是:

  • 创建一个SIPTLSChannel,如问题示例所示
  • 使用需要TLS传输的URI创建SIP请求:
    • 啜饮:100@sipsorcery.com
    • sip:100@sipsorcery.com;传输=tls
  • Call
    Send
    和请求,SIP传输类负责创建传出TCP连接和SSL协商

据我所知,SIPChannel指的是一种点对点连接(UDP、TCP)。因此,您必须使用多个SIPChannel对象连接到多个服务器。这意味着我将在一台服务器上使用更多端口,具体取决于我希望TLS连接到的远程sip服务器的数量,这可能是一个问题。
void Send(IPEndPoint dstEndPoint, byte[] buffer, string serverCertificateName)