有没有人知道,如果是这样,我如何使用我的应用程序代码检查服务器是否启用了ssl?
答案 0 :(得分:9)
"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。
答案 1 :(得分: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没有。
答案 2 :(得分:2)
不确定您的偏好语言,但这里是c#
public bool IsSecureConnection()
{
return HttpContext.Current.Request.IsSecureConnection ||
HttpContext.Current.Request.Headers["HTTP_X_SSL_REQUEST"].Equals("1");
}
请注意这个标题是自定义的,但我认为你明白了。我见过民众只是查询“https”的请求,除了看起来很脏,它可能是合理可接受的,取决于你的安全模型。
或者你在问它是否完全可用?
我
答案 3 :(得分:1)
这是一个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);
}
}
答案 4 :(得分:0)
您需要指定您正在使用的协议 - 有HTTP版本的HTTP,IMAP,POP等。
假设您感兴趣的是HTTPS,您可以检查服务器上的端口443上是否正在侦听某些内容并从那里开始...
答案 5 :(得分:0)
如果您在服务器上运行PHP或ASP代码,那么简短的答案就是您没有。您可以尝试与非ssl IP地址建立套接字连接,并查看是否获得ssl证书,并枚举其Common Name和SubjectAlternativeNames,但一般来说,简单的答案是您不这样做。 apache的频繁(错误)配置是在没有SSL证书的情况下侦听端口443,因此能够建立连接并不能保证在那里存在SSL。无法建立连接可能意味着您的应用程序没有网络权限。因为设置SSL很麻烦,你知道你是否有SSL,这是一个配置决定。这就像想知道你有多少孩子 - 你应该知道。
答案 6 :(得分:0)