HTTPS好用不难

HTTPS是非常基础和有效的安全方式,可以较好的防御中间人攻击。

网上关于HTTPS的详细介绍已经非常多了,这里只备忘一些有趣的细节,快速解惑之用。

原理

HTTP在传输过程中是不加密的,因此传输过程中非常容易受到嗅探和劫持。

HTTPS在客户端(通常是浏览器)和服务端增加了加解密环节,从而保证传输过程数据是加密的。

安全备忘

1、HTTPS支持单向认证和双向认证。

     单向认证是主要方式,即客户端验证服务端证书有效性。

     双向认证主要应用于企业级应用,这种情况下,服务端也会验证客户端证书,因此意味着双方是互相提前知晓的,因此也只有在企业级场景下才可以达成。

2、HTTPS单向认证传输过程依然可以嗅探和劫持。

     单向认证情况下,传输过程依然可以实现嗅探和劫持。

     首先服务端并不验证客户端有效性,而客户端只验证服务端证书的有效性,因此只要中间传输过程通过代理方式成功欺骗客户端即可。

     有两种情况:

     1)中间人使用虚假证书。此时一般客户端浏览器虽然验证发现证书存在问题,只会提示不安全,用户依然可以手动同意访问。很多普通用户安全知识缺乏,常常会忽略浏览器的不安全提示。

    2)浏览器是通过验证证书根签名以及域名、IP等附属信息一致性来验证浏览器证书。因此有些中间攻击会去正规根证书中心签名,从而合法有效的证书。这时候浏览器自然不会发现异常,用户也就无从知晓。正是因为这个问题,有些根证书中心因为滥发签名的问题,被Chrome、Firefox等浏览器不再信任。

3、HTTPS单向认证不保证服务端安全性

   服务端不验证客户端的有效性,因此服务端的安全性依然需要自行防护。

   有没有HTTPS,服务端都需要防CSRF、防注入、防DDOS……

4、最好使用有效的根证书机构签发的证书。

    使用自签名证书当然是可以的,缺点是需要客户端导入根证书信息,从而认可服务端合法性。导入证书的事情在2C场景下基本无法达成。

    由于Chrome、Firefox、IE等常见里浏览器出厂时,已经自带大量公认的根证书机构证书信息。 因此还是购买有效的根证书机构签发的证书吧。不贵。

实现备忘

1、HTTPS默认是443端口

    HTTPS是一个应用层协议,和HTTP同一等级,因此它有默认端口443。

    所以,不要想当然以为https会访问80端口。

2、https访问速度慢于http

   由于存在事前协商、加密等工作,因此https的访问速度是要慢于http。这也是安全性带来的性能消耗。

   当然,在这个时代,这点速度消耗基本可以忽略。

3、http 可以通过反向代理的方式快速升级到https。

     目前apache、nginx都支持反向代理的方式将http网站升级到https。

     原理很简单,apache或者nginx完成配置后,他们作为代理和客户端完成加密通信,把解密后的内容和原始http通信。

     这种方式最大的好处是,原本的http网站不需要任何修改

4、跨域情况下,https不能支持access-control-allow-origin:*

     http情况下,cors可以配置为access-control-allow-origin:*,一通百通。

     https情况下,不能使用通配符,需要指定具体的信息。当然,可以在反向代理中直接替换为请求头的Origin。

5、fiefox对双向认证支持不好。

   实测中发现,chrome可以比较好的支持双向认证,firefox则存在一定兼容性问题。

尾声

HTTPS经过多年推广,终于已经比较成熟。证书机构、浏览器、web服务器都有相对比较完善的支持,成本也不高。

地址栏的小锁对用户来说,是巨大的安全感。建议网站可以考虑升级一下,大大提升用户信任。

你可能感兴趣的:(HTTPS好用不难)