Equalivent for openssl s_client-在C#中连接<主机名>:<端口>

时间:2018-11-28 10:48:55

标签: c# openssl

当我执行openssl命令以连接特定服务器[myadda.tie.fire.glass ....哑服务器名称]时,它会给我一些输出。

openssl s_client -connect myadda.tie.fire.glass:443

它给了我一些输出,其中包含

之类的信息。
  • 服务器证书
  • 发行人信息

另一个命令,它需要上述命令中的证书来向我提供有关证书的详细信息。

openssl x509 -in <Certificate_FileName.crt> -text -nout

它为我提供有关证书信息的输出

  • 为服务器发布
  • 有效期

我希望使用某些C#类进行类似的输出。我不确定如何解决此查询。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

下面的代码可以帮助我检索所需的信息。

            X509Certificate2 cert = null;
            var client = new TcpClient(host, 443);
            var certValidation = new RemoteCertificateValidationCallback(delegate (object snd, X509Certificate certificate, X509Chain chainLocal, SslPolicyErrors sslPolicyErrors)
            {
                //Accept every certificate, even if it's invalid
                return true;
            });

            // Create an SSL stream and takeover client's stream
            using (var sslStream = new SslStream(client.GetStream(), true, certValidation))
            {
                sslStream.AuthenticateAsClient(host);

                var serverCertificate = sslStream.RemoteCertificate;
                cert = new X509Certificate2(serverCertificate);

                //Convert Raw Data to Base64String
                var certBytes = cert.Export(X509ContentType.Cert);

                var certAsString = Convert.ToBase64String(certBytes, Base64FormattingOptions.None);

            }

vertAsString 给我证书,而 cert 给我其他必需信息。