c# – 使用OpenSSL .Net检索证书
发布时间:2020-12-15 08:05:40 所属栏目:百科 来源:网络整理
导读:我想使用OpenSSL .Net包装器从远程服务器检索证书到我的C#代码.基本上,我想复制 openssl s_client -connect 192.168.254.13:636 -showcerts ..并最终将结果带入X509证书.这是否可能,如果是这样,任何人都可以指出我正确的方向? 解决方法 我认为问题分为两部
我想使用OpenSSL .Net包装器从远程服务器检索证书到我的C#代码.基本上,我想复制
openssl s_client -connect 192.168.254.13:636 -showcerts ..并最终将结果带入X509证书.这是否可能,如果是这样,任何人都可以指出我正确的方向? 解决方法
我认为问题分为两部分:
>如何检索服务器的证书 要重新获得服务器的证书,请使用SslStream,其方法类似于.NET自己的SslStream var serverName = "...; var client = new TcpClient(serverName,443); // Create an SSL stream that will close the client's stream. using (var sslStream = new SslStream(client.GetStream(),true)) { sslStream.AuthenticateAsClient(serverName); var serverCertificate = sslStream.RemoteCertificate; } 似乎OpenSSL.Net无法检索证书的链. -showcerts参数使用SSL_get_peer_cert_chain函数,该函数未在OpenSSL.NET中实现. 如果您不介意混合使用OpenSSL.Net和内置的.NET类,可以将OpenSSL.Net证书转换为.NET证书并使用.NET的X509Chain.Build检索链.您可以使用.NET证书的RawData属性将.NET证书转换回OpenSSL.NET证书. var managedCert = new System.Security.Cryptography.X509Certificates.X509Certificate2(serverCertificate.DER); var chain = new System.Security.Cryptography.X509Certificates.X509Chain(); chain.Build(managedCert); foreach (var element in chain.ChainElements) { var raw = element.Certificate.RawData; using (var bio = new BIO(raw)) { var oc = OpenSSL.X509.X509Certificate.FromDER(bio); } } 也许您可以使用.NET的SslStream和X509Certificate2对象来使用原始证书数据执行您想要的操作而不使用OpenSSL.Net. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |