民间布道: 让 Web 服务使用 HTTPS

2016-06-19 00:42:29 +08:00
 iugo

感觉 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 服务一般需要两个东西:

  1. 提供 HTTP 服务的.
  2. 提供 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?

  1. 获取免费证书 Let's Encrypt, StartSSL
  2. 通过免费 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)


原文: https://blog.clian.net/web-https/

9012 次点击
所在节点    程序员
56 条回复
UnisandK
2016-06-19 00:57:29 +08:00
yexm0
2016-06-19 01:27:43 +08:00
如果想要客户浏览你的网站时在浏览器地址栏旁显示中文公司名称的话可以看看沃通的 ev ssl 证书。不过价格非常昂贵就是了。
不需要中文公司名的话可以看看 startssl: https://www.startssl.com/NewsDetails?date=20160606
ck65
2016-06-19 01:32:24 +08:00
很适时的布道。感谢已发,再加五个铜板。
lslqtz
2016-06-19 01:32:56 +08:00
@UnisandK 这个好,免费签了 alphassl 的泛域名。
supman
2016-06-19 01:37:30 +08:00
在 godaddy 买了一个 后来发现 竟然不支持子域名。。好伤心
lslqtz
2016-06-19 01:41:32 +08:00
@supman 上面给的那个支持泛域名,爽炸了。
lslqtz
2016-06-19 01:43:19 +08:00
证书属性
主题: OU=Domain Control Validated,CN=*.loli.cn.com
私钥长度: 2048
算法: SHA256withRSA
SHA1: A1453028EA6E896C992ACFC5803937F51F6904C6
extKeyUsage: Server Authentication;Client Authentication;
sans: *.loli.cn.com , loli.cn.com
ocspUrl: http://ocsp2.globalsign.com/gsalphasha2g2
crlUrl: http://crl2.alphassl.com/gs/gsalphasha2g2.crl
caUrl: http://secure2.alphassl.com/cacert/gsalphasha2g2r1.crt
序列号: 3ff51e52
keyUsage: keyEncipherment digitalSignature dataEncipherment
issue: C=BE,O=GlobalSign nv-sa,CN=AlphaSSL CA - SHA256 - G2
root:
有效期: 365(天)
颁发时间: 2016-6-19 1:32:36
截止时间: 2017-6-20 1:32:36
公钥:
ASN1:

@UnisandK 感谢已发送。
New2016
2016-06-19 02:06:31 +08:00
binux
2016-06-19 02:32:22 +08:00
「增加了证书, 增加了加解密, 理论上肯定有额外消耗.
但这些都是值得的. 而且这些消耗在目前一个页面动辄几百 KB 的年代, 应该不算什么.」

额外消耗的是 CPU ,和「动辄几百 KB 」反而是加大消耗的关系。
lslqtz
2016-06-19 03:14:21 +08:00
@binux cpu 消耗起来简直要死人,还是挂 cdn 上 http 回源吧。
SlipStupig
2016-06-19 06:58:25 +08:00
之前看 google 的说法是全线产品全部启用 tls ,对消耗的增加并不大
@lslqtz
lslqtz
2016-06-19 07:19:39 +08:00
@SlipStupig 你也要想想人有多少服务器啊。。
egen
2016-06-19 08:24:58 +08:00
上了 HTTPS 后顺便上 HTTP2 才划算
RangerWolf
2016-06-19 08:34:59 +08:00
感谢布道! 想问下,你介绍的这些,是否适用于 http2 呢?

基本上不太了解相关的东西~ 希望能继续布道 :D
dndx
2016-06-19 08:37:37 +08:00
@binux
@lslqtz Google 连 Youtube 视频都使用 TLS 了, CPU 都有 AES-NI , I/O 会比 CPU 资源先用尽。
lslqtz
2016-06-19 08:50:31 +08:00
@dndx 可它们是用 chacha20 啊。。
lslqtz
2016-06-19 08:52:20 +08:00
@RangerWolf 适用。
lslqtz
2016-06-19 08:54:35 +08:00
@yexm0 为啥要沃通的,其他品牌不好吗。
startssl 优势比沃通好多了。
yexm0
2016-06-19 09:06:32 +08:00
@lslqtz 暂时没听说其他家支持中文公司名
Themyth
2016-06-19 11:13:42 +08:00
实话说,不知道是不是错觉,总觉得使用 ssl 的比不使用 ssl 的慢很多?
现在我也在头疼要不要全部使用 ssl 了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/286764

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX