2016-07-20 36 views
0

到目前爲止,我能夠得到網頁的SSL證書的有效期限在那裏我沒有用一個用戶名密碼&授權:檢查SSL-Certifacte到期日擅自

class Program 
{ 
    static void ReadExpirDate() 
    { 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com"); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    response.Close(); 

    X509Certificate cert = request.ServicePoint.Certificate; 
    X509Certificate2 cert2 = new X509Certificate2(cert); 

    string cedate = cert2.GetExpirationDateString(); 
    Console.WriteLine(cedate); 
    } 
} 

但是,如果我嘗試獲取網頁的到期日期,我需要使用用戶名&密碼進行授權,然後才能訪問它,我得到一個System.Net.WebException「錯誤:(401)未授權」異常。 是否有任何可能的方式來獲得SSL證書到期日期?

回答

0

這條線:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

做了真正到指定的URL是未經授權的,這就是異常被拋出的地方,如果你這樣做,那麼你可以從返回request使用Certificate屬性的調用盡管Exception

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com"); 
X509Certificate cert2 = null; 

try { 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    X509Certificate cert = request.ServicePoint.Certificate; 
    X509Certificate2 cert2 = new X509Certificate2(cert); 
} catch { 
    X509Certificate cert = request.ServicePoint.Certificate; 
    X509Certificate2 cert2 = new X509Certificate2(cert); 
} finally { 
    response.Close(); 
} 

if (cert2 != null) { 
    string cedate = cert2.GetExpirationDateString(); 
    Console.WriteLine(cedate); 
} 

該代碼會受到一些更好的異常處理和重構,但它應該工作。

+0

當我遺漏了響應部分,我沒有得到未經授權的例外是。但是現在,我在「X509Certificate2 cert2 = new X509Certificate2(cert)」行中遇到了異常。因爲證書是空的。 – FabianJ

+0

啊我的不好,我認爲在這種情況下,你應該只獲得URL的主機部分的證書,而不是整個頁面的URL?除非你知道在你的情況下,這不會工作? – starlight54

+0

嗯,我認爲主要的問題是我嘗試從中獲得證書的網站在登錄之前不會加載。所以我永遠不會收到它的完整回覆。我想我需要尋找一個機會來獲得沒有迴應的證書。例如。在我的瀏覽器中,我可以手動查找證書而無需登錄該網站。 – FabianJ