2008-11-28 148 views
11

是否有人知道,如果有的話,如果服務器啓用了SSL,我該如何檢查應用代碼?如何檢查服務器是否啓用了SSL?

+0

你能提供一些信息。關於你寫這個的環境? – 2008-11-28 12:42:54

+0

你不能。服務器沒有ssl,網站做。 – Kuzgun 2013-12-03 15:27:18

回答

8

"It's easier to ask forgiveness than permission"

例如,讀通過SSL stackoverflow.com,不問stackoverflow.com是否支持它,只是做到這一點。在Python中:

>>> import urllib2 
>>> urllib2.urlopen('https://stackoverflow.com') 
Traceback (most recent call last): 
... 
urllib2.URLError: <urlopen error (10060, 'Operation timed out')> 
>>> html = urllib2.urlopen('http://stackoverflow.com').read() 
>>> len(html) 
146271 
>>> 

這表明stackoverflow.com不支持SSL(2008)。


更新:stackoverflow.com現在支持HTTPS。

2

不知道自己的偏好的語言,但在這裏它是在C#

public bool IsSecureConnection() 
{ 
    return HttpContext.Current.Request.IsSecureConnection || 
      HttpContext.Current.Request.Headers["HTTP_X_SSL_REQUEST"].Equals("1"); 
} 

請注意,這頭是定製的,但我覺得你的想法。我見過人們只是簡單地查詢「https」的請求,除了看起來很髒,它可能是合理可接受的,取決於你的安全模型。

或者你問它是否簡單可用?

+0

Thx鴿子,我認爲是在服務器端,我想知道在客戶端如何知道服務器是否接受SSL連接。 (如果我能以某種方式)。我想我可以做一些異常處理,如果我嘗試使用ssl enable連接到服務器並且出現異常,那麼服務器(可能)沒有啓用ssl。但我能以其他方式做到嗎? – 2008-11-28 12:41:12

0

你需要指定你正在使用何種協議 - 有HTTP,IMAP,POP的SSL版本等

假設它是HTTPS您有興趣,你可以檢查看看是否有在服務器偵聽端口443,並從那裏......

5

您不指定編程語言,但可以從命令行執行此操作。

bash-3.2$ echo ^D | telnet www.google.com https 
Trying 66.102.11.104... 
Connected to www.l.google.com. 
Escape character is '^]'. 
Connection closed by foreign host. 
bash-3.2$ echo ^D | telnet www.stackoverflow.com https 
Trying 69.59.196.211... 
telnet: connect to address 69.59.196.211: Connection refused 
telnet: Unable to connect to remote host 

你去......谷歌呢,StackOverflow沒有。

0

如果您在服務器上運行PHP或ASP代碼,那麼最簡單的答案就是您不需要。您可以嘗試建立與非ssl IP地址的套接字連接,並查看是否獲得ssl證書,並枚舉其Common Name和SubjectAlternativeNames,但通常情況下,簡單答案是不。 apache頻繁(錯誤)配置是在沒有SSL證書的情況下在端口443上偵聽,因此能夠進行連接並不能保證那裏存在SSL。無法建立連接可能意味着您的應用程序沒有網絡權限。因爲設置SSL是一種痛苦,所以您知道您是否擁有SSL,這是一個配置決定。這就像想知道你有多少孩子 - 你應該知道的。

0

這是一個C#單元測試,而無需在右邊的HttpContext進行檢測:

[TestMethod] 
    public void DetectSslSupport() 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.someinsecuresite.com"); 
     try 
     { 
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       //some sites like stackoverflow will perform a service side redirect to the http site before the browser/request can throw an errror. 
       Assert.IsTrue(response.ResponseUri.Scheme == "https"); 
      } 
     } 
     catch (WebException)//"The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel."} 
     { 
      Assert.IsTrue(false); 
     } 
    } 
相關問題