我想构建一个可以判断某个网站是否使用https的脚本。
有什么方法可以通过编程方式确定这一点?我尝试访问我自己的域名,我知道没有https,但服务器仍然给了我200个代码(至少,根据我使用的Chrome扩展程序)。
是否存在某些我可以捕获的错误,或者某些其他信息在站点之间是否一致?
答案 0 :(得分:2)
理论上,您需要事先知道是否应该使用HTTPS。通过这种方式,我的意思是用户有一部分判断期望对某些站点使用HTTPS。在现实世界中,当您走进银行并走进咖啡店时,您通常会有不同的安全期望。你通常不愿意向酒吧后面的人提供同样的细节,就像你对银行家一样。这同样适用于网络。
也就是说,您确实可以测试是否可以建立与某个网站的HTTPS连接。问题是无法建立此连接可能意味着一些事情:
许多网站会尝试通过重定向将您从HTTP升级到HTTPS,以使用户意识到HTTPS可用,并希望他们下次访问该网站时能够期待它。有些网站甚至会使用HTTP严格传输安全(HSTS)来强制您在下次访问该网站时记住该升级。如果您可以假设您的第一个连接未得到缓和,那么这是一个合理的折衷方案。
有什么方法可以通过编程方式确定这一点?我尝试访问我自己的域名,我知道没有https,但服务器仍然给了我200个代码。
如果您的域名没有有效证书,则证书验证失败,您根本无法获得任何HTTP状态代码。
我猜你所使用的脚本不会进行任何证书验证,也许这些域指向共享托管环境,其他具有相同IP地址的服务都支持HTTPS。
您至少应该确保您的脚本正确验证证书:
并非所有SSL / TLS库都默认启用此功能(尤其是第二点)。
我不确定您的脚本使用的是什么,或者您提到的扩展名是什么。例如,如果您使用的是curl
,请确保您没有使用-k
或--insecure
,并且您正在使用wget
,请确保您不是使用--no-check-certificate
。如果您使用libcurl
,则应确保自己为using the VERIFYPEER
and VERIFYHOST
properly。如果这不是您正在使用的,请在其他实现中查找类似的选项,并且不要忽略浏览器警告。
答案 1 :(得分:0)
在Windows上,您可以使用free Basic Edition of HttpWatch及其automation interface编写一个访问您要测试的网站的程序。
Entry类上的Error property将允许您检测HTTP连接失败的情况。