Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用IP地址而不是DNS(.net C#)获取ssl证书_C#_Ssl_Dns_Ip - Fatal编程技术网

如何使用IP地址而不是DNS(.net C#)获取ssl证书

如何使用IP地址而不是DNS(.net C#)获取ssl证书,c#,ssl,dns,ip,C#,Ssl,Dns,Ip,我正在尝试使用ip地址获取SSL证书,或者如果可能的话(DNS和ip地址),老实说,我对SSL证书没有任何概念,我已经读了一些关于它的内容,我必须这样做,因为这是一个新的要求,我们必须使用与DNS无关的ip地址(在某些情况下) 搜索后,我找到了此解决方案: //Do webrequest to get info on secure site HttpWebRequest request = (HttpWebRequest)WebRequest.Create(txbURL.Text); HttpW

我正在尝试使用ip地址获取SSL证书,或者如果可能的话(DNS和ip地址),老实说,我对SSL证书没有任何概念,我已经读了一些关于它的内容,我必须这样做,因为这是一个新的要求,我们必须使用与DNS无关的ip地址(在某些情况下)

搜索后,我找到了此解决方案:

//Do webrequest to get info on secure site
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(txbURL.Text);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
request.AllowAutoRedirect = false;
response.Close();

//retrieve the ssl cert and assign it to an X509Certificate object
X509Certificate cert = request.ServicePoint.Certificate;

//convert the X509Certificate to an X509Certificate2 object by passing it into the constructor
X509Certificate2 cert2 = new X509Certificate2(cert);

//display the cert dialog box
rtbResult.Text = string.Format("Not Before: {0}\nNot After: {1}", cert2.NotBefore, cert2.NotAfter);

他们只要求提供NotBefore和NotAfter日期,如果您使用类似但不与ip地址一起使用的内容,则可以使用,您知道如何在其上使用ip地址吗?

我最近成功地从本地服务器(由实验CA签名,但这并不重要)提取了在私有ip上颁发的证书,所以这既不是bug,也不是你的应用程序错误(可能-我使用了
HttpClient
类方法,但你的代码看起来也不错)


real的问题是,如果您试图从中提取证书的服务器在IP连接上支持SSL/TLS,并且为其IP分配了有效的(在操作系统上下文中)证书。在大多数现代Web服务器上,证书是在虚拟主机上实现的,使用并仅通过其IP查询它可以返回自签名、不受信任的证书、无效(过期)证书或根本没有证书,导致SSL协商错误。

我相信大多数CA都会拒绝颁发包含主题备选名称或主题CN属性的IP地址的证书。我发现使用不同的端口取决于协议。。。我已经在使用990(ftps)的unix上测试了其中的一些,但是如果我使用我的C#程序中的HttpWebRequest类进行测试,我无法获得该值。。。我怎么能接受任何协议?