感觉 V2 现在更加 "平民化" 了, 所以发点普通的东西, 说不定有用.
如有错漏, 还请雅正.
什么是 HTTPS?
安全的 HTTP 协议. 正式名称为 HTTP over TLS. 注, S-HTTP 是另一种东西.
核心就是基于证书的安全协议, SSL/TLS. TLS 是将 SSL 标准化后的名字, 现在 TLS 基本替代了之前 SSL 这个称呼.
标准: RFC; 制定者: IETF
为什么要使用 HTTPS?
HTTP 是明文传输的, 所以容易被中间人攻击. 使用 HTTPS 可以保护信息安全.
中间人攻击的危害非常大, 攻击者不仅能获取你的信息, 还能修改你收到的信息.
其次, 现在主流浏览器对 HTTP/2 要求必须使用 over TLS. Chrome 51 版本之后还只支持 ALPN 而废止对 NPN 的支持, 如果不支持 ALPN 则自动降级到 HTTP/1.1 .
什么是 ALPN, 什么是 NPN?
它们也都是协议, 主要定义了证书是如何传输及验证的. NPN 已经被逐渐废弃, 使用 ALPN 替代.
使用 HTTPS 会变慢吗?
增加了证书, 增加了加解密, 理论上肯定有额外消耗.
但这些都是值得的. 而且这些消耗在目前一个页面动辄几百 KB 的年代, 应该不算什么. 并且, 浏览器对于 HTTP/2 只认加密的.
如何让 Web 服务支持 HTTPS?
实现 HTTPS 服务一般需要两个东西:
- 提供 HTTP 服务的.
- 提供 TLS 服务的.
后者在 Linux 发行版中一般会被预装, 一款名为 OpenSSL 的软件工具集. 这里还要注意, 只有 OpenSSL 1.0.2 及以上版本才支持 ALPN.
如何配置 Web 服务器
https://mozilla.github.io/server-side-tls/ssl-config-generator/
这是一个自动生成 Web 服务配置文件的工具. 提供了 Apache, Nginx, Lighttpd 添加 HTTPS 服务的建议配置文件.
这些配置主要是监听 443 端口, 加入证书, 定义一下加密方法.
如何免费让 Web 服务支持 HTTPS?
- 获取免费证书 Let's Encrypt, StartSSL
- 通过免费 CDN CloudFlare
使用免费证书或者自签名证书需要注意:
证书需要被认可才有效, 级别高的服务需要更可信的证书, 所以建议商业用户购买可靠的证书. 另外, 要注意证书链和有效期的问题.
如何检测一个网站是否支持 HTTPS?
一般浏览器地址栏中会显示. 包含 https 字样, 或者为绿色皆为该站支持 HTTPS.
不建议在 HTTPS 页面中使用非 HTTPS 的资源. 如果出现这种情况, 浏览器会做提醒.
也可以通过这个地址进行测试: https://www.ssllabs.com/ssltest/
附录
相关 RFC 标准
HTTPS: RFC 2818 - HTTP Over TLS (2000)
HTTP/2: RFC 7540 - Hypertext Transfer Protocol Version 2 (2015)
TLS: RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2 (2008)
ALPN: RFC 7639 - The ALPN HTTP Header Field (2015)