https的七个误解
误解七:https 无法缓存许多人以为,出于安全考虑,浏览器不会在本地保存https 缓存。实际上,只要在http 头中使用特定命令,https 是可以缓存的。微软的ie 项目经理eric lawre
误解七:https 无法缓存
许多人以为,出于安全考虑,浏览器不会在本地保存https 缓存。实际上,只要在http 头中使用特定命令,https 是可以缓存的。
微软的ie 项目经理eric lawrence写道:
" 说来也许令人震惊,只要http 头允许这样做,所有版本的ie 都缓存https 内容。比如,如果头命令是cache-control:max-age=600,那么这个网页就将被ie 缓存10分钟。ie 的缓存策略,与是否使用https 协议无关。(其他浏览器在这方面的行为不一致,取决于你使用的版本,所以这里不加以讨论。)"
firefox默认只在内存中缓存https 。但是,只要头命令中有cache-control:public,缓存就会被写到硬盘上。下面的图片显示,firefox 的硬盘缓存中有https 内容,头命令正是cache-control:public。
误解六:ssl 证书很贵
如果你在网上搜一下,就会发现很多便宜的ssl 证书,大概10美元一年,这和一个.com 域名的年费差不多。而且事实上,还能找到免费的ssl 证书。
在效力上,便宜的证书当然会比大机构颁发的证书差一点,但是几乎所有的主流浏览器都接受这些证书。
误解五:https 站点必须有独享的ip 地址
由于ipv4将要分配完毕,所以很多人关心这个问题。每个ip 地址只能安装一张ssl 证书,这是毫无疑问的。但是,如果你使用子域名通配符ssl 证书(wildcard ssl certificate,价格大约是每年125美元),就能在一个ip 地址上部署多个https 子域名。比如,
另外,ucc (统一通信证书,unified communications certificate)支持一张证书同时匹配多个站点,可以是完全不同的域名。sni (服务器名称指示,server name indication)允许一个ip 地址上多个域名安装多张证书。服务器端,apache 和nginx 支持该技术,iis 不支持;客户端,ie7 、firefox 2.0 、chrome 6 、safari 2.1 和opera 8.0 支持。
误解四:转移服务器时要购买新证书
部署ssl 证书,需要这样几步:
1. 在你的服务器上,生成一个csr 文件(ssl 证书请求文件,
ssl certificate signing request)。
,2. 使用csr 文件,购买ssl 证书。
3. 安装ssl 证书。
这些步骤都经过精心设计,保证传输的安全,防止有人截取或非法获得证书。结果就是,你在第二步得到的证书不能用在另一台服务器上。如果你需要这样做,就必须以其他格式输出证书。 比如,iis 的做法是生成一个可以转移的.pfx 文件,并加以密码保护。
将这个文件传入其他服务器,将可以继续使用原来的ssl 证书了。
误解三:https 太慢
使用https 不会使你的网站变得更快(实际上有可能,请看下文),但是有一些技巧可以大大减少额外开销。
首先,只要压缩文本内容,就会降低解码耗用的cpu 资源。不过,对于当代cpu 来说,这点开销不值一提。
其次,建立https 连接,要求额外的tcp 往返,因此会新增一些发送和接收的字节。但是,从下图可以看到,新增的字节是很少的。
第一次打开网页的时候,https 协议会比http 协议慢一点,这是因为读取和验证ssl 证书的时间。下面是一张http 网页打开时间的瀑布图。
同一张网页使用https 协议之后,打开时间变长了。
建立连接的部分,大约慢了10。但是,一旦有效的https 连接建立起来,再刷新网页,两种协议几乎没有区别。先是http 协议的刷新表现:
然后是https 协议:
,某些用户可能发现,https 比http 更快一点。这会发生在一些大公司的内部局域网,因为通常情况下,公司的网关会截取并分析所有的网络通信。但 是,当它遇到https 连接时,它就只能直接放行,因为https 无法被解读。正是因为少了这个解读的过程,所以https 变得比较快。 误解二:有了https ,cookie 和查询字符串就安全了
虽然无法直接从https 数据中读取cookie 和查询字符串,但是你仍然需要使它们的值变得难以预测。
比如,曾经有一家英国银行,直接使用顺序排列的数值表示session id:
黑客可以先注册一个账户,找到这个cookie ,看到这个值的表示方法。然后,改动cookie ,从而劫持其他人的session id。至于查询字符串,也可以通过类似方式泄漏。
误解一:只有注册登录页,才需要https
这种想法很普遍。人们觉得,https 可以保护用户的密码,此外就不需要了。firefox 浏览器新插件firesheep ,证明了这种想法是错的。我们可以看到,在twitter 和facebook 上,劫持其他人的session 是非常容易的。
咖啡馆的免费wifi ,就是一个很理想的劫持环境,因为两个原因:
1. 这种wifi 通常不会加密,所以很容易监控所有流量。
2. wifi通常使用nat 进行外网和内网的地址转换,所有内网客户端都共享一个外网地址。这意味着,被劫持的session ,看上去很像来自原来的登录者。
以twitter 为例,它的登录页使用了https ,但是登录以后,其他页面就变成了http 。这时,它的cookie 里的session 值就暴露了。
也就是说,这些cookie 是在https 环境下建立的,但是却在http 环境下传输。如果有人劫持到这些cookie ,那他就能以你的身份在twitter 上发言了。