【问题标题】:Determine the SSL connection type when connecting through TCP通过 TCP 连接时确定 SSL 连接类型
【发布时间】:2016-01-26 22:42:14
【问题描述】:

我正在使用以下代码连接到主机:

protected bool OpenSocket(string hostIPAddress, int hostIPPort)
{
    try
    {
        if ((this._tcpSocket != null) && (this._tcpSocket.Connected == true))
            return (true);
    }
    catch { }

    // Reset variables
    this._isSocketOpen = false;
    this._isSSLOpen = false;

    string ipAddress = this.GetHostIPAddress(hostIPAddress);
    this._tcpSocket = new TcpClient(ipAddress, hostIPPort);
    this._tcpipConnectionStream = this._tcpSocket.GetStream();
    this._isSocketOpen = true;
    return true;
}

在连接到主机时,有什么方法可以确定 SSL 连接类型(即 SSL2、SSL3、TL1.2)吗?我已经研究过使用这样的东西:

SslStream sslStream = new SslStream(this._tcpSocket.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient(hostIPAddress);

但是我认为这将用于设置 SSL 协议不是吗,而不是获取它?我很迷茫。

【问题讨论】:

  • 您发布的代码是否足以创建与主机的 SSL 连接?这是你要找的,还是我想念你理解你
  • 另请参阅此链接,它可能会有所帮助stackoverflow.com/questions/252365
  • @Hakem Fostok。我只想知道建立连接后的连接类型是什么

标签: c# ssl tcp


【解决方案1】:

您可以通过查询SslStream类型的SslProtocol属性来检查连接的类型。

SslStream sslStream = new SslStream(this._tcpSocket.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient(hostIPAddress);
Console.WriteLine(sslStream.SslProtocol);

此属性将返回 Enumeration 的值 SslProtocols

有关此属性的更多信息,请参阅MSDN

【讨论】:

  • 谢谢!当我之前尝试使用该代码时,在查询 ssl 协议时,我不断收到异常。我不知道为什么它现在起作用了!
  • 但请稍等片刻。通过实例化 sslStream 变量,它不会自动在代码中设置 SSL 协议吗?我不确定这一切是如何运作的。什么决定了 SSL 协议?我运行了代码并得到了 TLS 的值,但我担心这只是默认值,它是由我的代码设置的,而不是由我的代码获取的。
  • 不,这不是默认值,请注意SslProtocol 属性没有设置属性,它只是一个获取属性(只读属性),SslStream 将为您设置值,所以可以查询。
  • 如果你注意到我回答中的第一个链接,你可以去 MSDN 看看TLS 值不是这个枚举的默认值,所以不要担心这一点.
  • 在该链接中,您还可以看到使用 SslStream 的一个很好的示例。我希望这会有所帮助
猜你喜欢
  • 1970-01-01
  • 2014-08-30
  • 2018-02-05
  • 2017-01-13
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2012-04-26
相关资源
最近更新 更多