2008-11-28 16 views
11

क्या आप में से कोई भी जानता है, अगर और यदि ऐसा है, तो मैं अपने एप्लिकेशन कोड के साथ कैसे जांच सकता हूं, अगर कोई सर्वर एसएसएल सक्षम है या नहीं?मैं कैसे जांच सकता हूं कि किसी सर्वर के पास एसएसएल सक्षम है या नहीं

+0

आप कुछ जानकारी प्रदान की जा सकी। पर्यावरण के बारे में जिसमें आप इसे लिख रहे हैं? –

+0

आप नहीं कर सकते। सर्वर में एसएसएल नहीं है, वेबसाइटें करते हैं। – Kuzgun

उत्तर

8

"It's easier to ask forgiveness than permission"

उदाहरण के लिए,,, बस कर दो। अजगर में:

>>> 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 एसएसएल (2008) का समर्थन नहीं करता।


अद्यतन:stackoverflow.com अब https का समर्थन करता है।

2

प्राथमिकता का अपनी भाषा पर यकीन नहीं, लेकिन यहाँ यह ग # में है

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

कृपया ध्यान दें यह हेडर पूर्णतः कस्टम है, लेकिन मुझे लगता है कि आप विचार मिलता है। मैंने "https" के लिए लोक बस पूछताछ अनुरोध देखा है और गंदे दिखने के अलावा यह शायद उचित रूप से स्वीकार्य है, आपके सुरक्षा मॉडल पर निर्भर करता है।

या आप पूछ रहे हैं कि यह बिल्कुल उपलब्ध है या नहीं?

मैं

+0

Thx कबूतर, मुझे लगता है कि सर्वर-साइड में है, मैं क्लाइंट-साइड में जानना चाहता हूं कि सर्वर कैसे एसएसएल कनेक्शन स्वीकार करता है, मुझे कैसे पता चलेगा। (अगर मैं किसी भी तरह से कर सकता हूं)। मुझे लगता है कि मैं इसे कुछ अपवाद हैंडलिंग के साथ कर सकता हूं, अगर मैं सर्वर से एसएसएल सक्षम करने के लिए कनेक्ट करने का प्रयास करता हूं और मुझे अपवाद मिलता है, तो सर्वर (शायद) में एसएसएल सक्षम नहीं है। लेकिन क्या मैं इसे किसी अन्य तरीके से कर सकता हूं? –

0

आप क्या प्रोटोकॉल आप के साथ काम कर रहे हैं निर्दिष्ट करने की आवश्यकता - HTTP, IMAP, POP के एसएसएल संस्करण हैं, आदि

मान लिया जाये कि यह HTTPS आप में रुचि रखते हैं, तो आप कर सकता है मत पूछो कि क्या stackoverflow.com इसका समर्थन करता है SSL के माध्यम से stackoverflow.com पढ़ने के लिए अगर कुछ सर्वर पर 443 पोर्ट पर सुन रहा है देख सकते हैं और वहां से जाने के लिए जाँच ...

+0

हां, मैंने उस पर भी सोचा, लेकिन मुझे लगता है कि सेवा का बंदरगाह सर्वर की कॉन्फ़िगरेशन पर निर्भर करता है, क्या मैं सही हूँ? बीटीडब्ल्यू, मैं https और smtp के साथ काम कर रहा हूँ, क्षमा करें। और वरीयता की मेरी भाषा सी # है, लेकिन अगर मैं एक प्राप्त करता हूं, तो मैं किसी भी भाषा को उत्तर के रूप में स्वीकार करता हूं: पी। आप दोनों के लिए धन्यवाद;) –

+0

हां, पोर्ट कॉन्फ़िगरेशन पर निर्भर करता है - लेकिन यदि आप एचटीटीपीएस का उपयोग कर यादृच्छिक साइट्स की कोशिश कर रहे हैं, तो यह पोर्ट 443 पर होगा। यदि यह – genehack

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 

वहां आप जाते हैं ... Google करता है, StackOverflow नहीं करता है।

0

यदि आप किसी सर्वर पर PHP या एएसपी कोड चला रहे हैं, तो संक्षिप्त उत्तर यह नहीं है। आप गैर-एसएसएल आईपी पते पर सॉकेट कनेक्शन बनाने का प्रयास कर सकते हैं, और देख सकते हैं कि आपको एसएसएल प्रमाण पत्र मिलता है, और इसके सामान्य नाम और विषय वैकल्पिक नामों का आकलन करें, लेकिन सामान्य रूप से, सरल उत्तर यह नहीं है। अपाचे का एक लगातार (गलत) कॉन्फ़िगरेशन एसएसएल प्रमाण पत्र के बिना पोर्ट 443 पर सुनना है, इसलिए कनेक्शन बनाने में सक्षम होने की कोई गारंटी नहीं है कि वहाँ SSL है। कनेक्शन बनाने में सक्षम नहीं होने का मतलब यह हो सकता है कि आपके एप्लिकेशन में नेटवर्किंग विशेषाधिकार नहीं हैं। चूंकि एसएसएल सेट करना एक दर्द है, आप जानते हैं कि आपके पास SSL है या नहीं, और यह एक कॉन्फ़िगरेशन निर्णय है। यह सोचने की तरह है कि आपके पास कितने बच्चे हैं - आपको पता होना चाहिए।

0

यह सही 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); 
     } 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे