SSL证书预取.NET
我在写一个实用程序,它可以让我监视我们网站的健康状况。这包含一系列可以针对Web应用程序运行的验证任务。其中一项测试是预测特定SSL证书的到期日期。SSL证书预取.NET
我正在寻找一种方法来预先获取安装在使用.NET或WINAPI的网站上的SSL证书,以便我可以验证与特定网站关联的证书的过期日期。
我可以做到这一点的一种方式是缓存证书,当它们在ServicePointManager.ServerCertificateValidationCallback处理程序中进行验证,然后将它们与配置的网站进行匹配时,但这看起来有点冒失。另一种方法是使用网站证书配置应用程序,但如果可以的话,我宁愿避免这种情况,以最大限度地减少配置。
什么是最简单的方式来下载与使用.NET的网站相关的SSL证书,以便我可以检查证书包含的信息以验证它?
编辑:
要在答案下面延伸没有必要手动创建之前创建请求的的ServicePoint。它是在请求对象上生成的,作为执行请求的一部分。
private static string GetSSLExpiration(string url)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
using (WebResponse response = request.GetResponse()) { }
if (request.ServicePoint.Certificate != null)
{
return request.ServicePoint.Certificate.GetExpirationDateString();
}
else
{
return string.Empty;
}
}
我刚刚试过这个,它“适用于我的机器(tm)”。
它返回表示服务器证书到期日期的文本字符串,并要求在网站上进行实际打击。
private string GetSSLExpiryDate(string url)
{
Uri u = new Uri(url);
ServicePoint sp = ServicePointManager.FindServicePoint(u);
string groupName = Guid.NewGuid().ToString();
HttpWebRequest req = HttpWebRequest.Create(u) as HttpWebRequest;
req.ConnectionGroupName = groupName;
using (WebResponse resp = req.GetResponse())
{
// Ignore response, and close the response.
}
sp.CloseConnectionGroup(groupName);
// Implement favourite null check pattern here on sp.Certificate
string expiryDate = sp.Certificate.GetExpirationDateString();
return expiryDate;
}
我怕我不知道所有的权利和使用的ServicePoint的过错,那你可能需要通过跳跃其他任何篮球,但你得到的实际网站的SSL到期日你想知道。
编辑: 确保“url”参数使用https://协议。
例如字符串contosoExpiry = GetSSLExpiryData(“https://www.contoso.com/”);
好男人 - 作品完美。谢谢!!! – 2010-03-24 18:14:32
当我遇到异常时,我使用它来编写证书详细信息。很棒。 – GregB 2011-04-13 18:54:48
当我读到这个时,我的主要问题是'这个ServicePoint的事情是什么?'它似乎是连接到特定站点http或https的“连接助手”对象,并共享重复连接到该站点所需的信息,例如,在这种情况下,证书。便利。 – 2012-02-28 05:13:26
真棒问题:) – 2012-02-28 05:09:01