感觉 V2 现在更加 "平民化" 了, 所以发点普通的东西, 说不定有用.
如有错漏, 还请雅正.
安全的 HTTP 协议. 正式名称为 HTTP over TLS. 注, S-HTTP 是另一种东西.
核心就是基于证书的安全协议, SSL/TLS. TLS 是将 SSL 标准化后的名字, 现在 TLS 基本替代了之前 SSL 这个称呼.
标准: RFC; 制定者: IETF
HTTP 是明文传输的, 所以容易被中间人攻击. 使用 HTTPS 可以保护信息安全.
中间人攻击的危害非常大, 攻击者不仅能获取你的信息, 还能修改你收到的信息.
其次, 现在主流浏览器对 HTTP/2 要求必须使用 over TLS. Chrome 51 版本之后还只支持 ALPN 而废止对 NPN 的支持, 如果不支持 ALPN 则自动降级到 HTTP/1.1 .
它们也都是协议, 主要定义了证书是如何传输及验证的. NPN 已经被逐渐废弃, 使用 ALPN 替代.
增加了证书, 增加了加解密, 理论上肯定有额外消耗.
但这些都是值得的. 而且这些消耗在目前一个页面动辄几百 KB 的年代, 应该不算什么. 并且, 浏览器对于 HTTP/2 只认加密的.
实现 HTTPS 服务一般需要两个东西:
后者在 Linux 发行版中一般会被预装, 一款名为 OpenSSL 的软件工具集. 这里还要注意, 只有 OpenSSL 1.0.2 及以上版本才支持 ALPN.
https://mozilla.github.io/server-side-tls/ssl-config-generator/
这是一个自动生成 Web 服务配置文件的工具. 提供了 Apache, Nginx, Lighttpd 添加 HTTPS 服务的建议配置文件.
这些配置主要是监听 443 端口, 加入证书, 定义一下加密方法.
使用免费证书或者自签名证书需要注意:
证书需要被认可才有效, 级别高的服务需要更可信的证书, 所以建议商业用户购买可靠的证书. 另外, 要注意证书链和有效期的问题.
一般浏览器地址栏中会显示. 包含 https 字样, 或者为绿色皆为该站支持 HTTPS.
不建议在 HTTPS 页面中使用非 HTTPS 的资源. 如果出现这种情况, 浏览器会做提醒.
也可以通过这个地址进行测试: https://www.ssllabs.com/ssltest/
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)
1
UnisandK 2016-06-19 00:57:29 +08:00 2
|
2
yexm0 2016-06-19 01:27:43 +08:00 via Android
如果想要客户浏览你的网站时在浏览器地址栏旁显示中文公司名称的话可以看看沃通的 ev ssl 证书。不过价格非常昂贵就是了。
不需要中文公司名的话可以看看 startssl: https://www.startssl.com/NewsDetails?date=20160606 |
3
ck65 2016-06-19 01:32:24 +08:00
很适时的布道。感谢已发,再加五个铜板。
|
5
supman 2016-06-19 01:37:30 +08:00 via iPad
在 godaddy 买了一个 后来发现 竟然不支持子域名。。好伤心
|
7
lslqtz 2016-06-19 01:43:19 +08:00 via iPhone
证书属性
主题: 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 感谢已发送。 |
8
New2016 2016-06-19 02:06:31 +08:00 4
|
9
binux 2016-06-19 02:32:22 +08:00
「增加了证书, 增加了加解密, 理论上肯定有额外消耗.
但这些都是值得的. 而且这些消耗在目前一个页面动辄几百 KB 的年代, 应该不算什么.」 额外消耗的是 CPU ,和「动辄几百 KB 」反而是加大消耗的关系。 |
11
SlipStupig 2016-06-19 06:58:25 +08:00
之前看 google 的说法是全线产品全部启用 tls ,对消耗的增加并不大
@lslqtz |
12
lslqtz 2016-06-19 07:19:39 +08:00
@SlipStupig 你也要想想人有多少服务器啊。。
|
13
egen 2016-06-19 08:24:58 +08:00
上了 HTTPS 后顺便上 HTTP2 才划算
|
14
RangerWolf 2016-06-19 08:34:59 +08:00
感谢布道! 想问下,你介绍的这些,是否适用于 http2 呢?
基本上不太了解相关的东西~ 希望能继续布道 :D |
15
dndx 2016-06-19 08:37:37 +08:00
|
17
lslqtz 2016-06-19 08:52:20 +08:00 via iPhone
@RangerWolf 适用。
|
20
Themyth 2016-06-19 11:13:42 +08:00
实话说,不知道是不是错觉,总觉得使用 ssl 的比不使用 ssl 的慢很多?
现在我也在头疼要不要全部使用 ssl 了。 |
21
zrj766 2016-06-19 11:16:28 +08:00 via Android
上了 SSL 吧,虽然就是个小博客,那堆图片替换还是让我费神的。。
|
23
SourceMan 2016-06-19 12:16:27 +08:00 via iPhone
这种文章,直接拉到上面,有推广链接的差评
而且按照 V2EX 的规则,你可以正文直接一个原文 URL 的 |
25
lslqtz 2016-06-19 12:23:57 +08:00 via iPhone
@yexm0
哪家我还真没听说过 我记得 comodo 可以 geotrust 可以 globalsign 可以 |
27
lavande 2016-06-19 13:20:45 +08:00
我想借机吐槽新浪微薄的登录页竟然不是 https
|
30
New2016 2016-06-19 14:07:24 +08:00 via iPhone
|
33
kkhu2004 2016-06-19 15:41:51 +08:00
手动感谢。
|
35
hfeeki 2016-06-19 16:24:57 +08:00
伟大的墙会组织你用 https 的
|
36
62900015 2016-06-19 16:50:09 +08:00
@New2016 https://github.com/Mujj/alpha-ssl-auto 这里是中文版,渠道都一样,都是 singlehop ,配置你的 singlehop 账号密码进去就 OK 。
|
37
imnpc 2016-06-19 17:52:36 +08:00
重要的网站都建议部署 SSL
|
38
v9ox 2016-06-19 18:03:55 +08:00
但这些都是值得的. 而且这些消耗在目前一个页面动辄几百 KB 的年代, 应该不算什么. 并且, 浏览器对于 HTTP/2 只认加密的.
没看懂最后一句... |
39
wql 2016-06-19 18:17:11 +08:00
纠正一下, ALPN 是一种 HTTP 版本协商协议,已经逐渐替代已经被废弃的 NPN ,成为标准。
|
40
BearTher 2016-06-19 18:29:04 +08:00
@lslqtz 为毛会有人买.cn.com 域名。。
|
41
hzlzh 2016-06-19 19:40:33 +08:00
昨天刚给 https://weflow.io/ 更换了 startssl 加的证书
|
42
iugo OP @binux
@lslqtz @dndx @SlipStupig https://istlsfastyet.com/ 加解密的确会对 CPU 有消耗。目前简单的办法就是硬件上使用专用加解密卡,软件上利用好 Session 重用。 |
43
iugo OP @wql 感谢。应该是我说得不准确。再补充一下:
ALPN 代指的是 The ALPN HTTP Header Field. ALPN 是 Application-Layer Protocol Negotiation 的缩写。 This specification allows HTTP CONNECT requests to indicate what protocol is intended to be used within the tunnel once established, using the ALPN header field. For a tunnel that is then secured using Transport Layer Security (TLS) [RFC5246], the header field carries the same application protocol label as will be carried within the TLS handshake [RFC7301]. If there are multiple possible application protocols, all of those application protocols are indicated. 大概意思就是 ALPN 是 HTTP 连接请求的一个字段。在使用 TLS 通道时,会包含 handshake 信息( ALPN 主要描述请求端而非响应端信息)。 NPN 的草案: https://tools.ietf.org/id/draft-agl-tls-nextprotoneg-03.html 还没正式确认就被替代了。估计主要因为 SPDY 被 HTTP/2 替代了吧。 |
44
Laynooor 2016-06-19 23:36:09 +08:00 via Android
网站要用到 Google 的字体库,用国内的源替换了, F12 看是 http1.2 https
其他网站资源都是 HTTP/2 HTTP 对速度有影响么 |
46
Zohar 2016-06-20 05:17:47 +08:00 via Android
@Laynooor 你需要这个→https://fonts.iwch.me/
|
49
BearTher 2016-06-20 10:36:16 +08:00
@lslqtz 可这压根就是个二级域啊。。 在我心目中它还不如 loli12580.com 有价值
|
51
codesun 2016-06-23 13:36:54 +08:00
HTTPS 就能完全避免中间人攻击了吗?好像不是吧。。。
任何信息都需要保证安全吗?好像不是吧。。。 TLS 协议本身没有任何漏洞吗?好像不是吧,可能只是目前未发现罢了 |
52
iugo OP @codesun
HTTPS 就能完全避免中间人攻击了吗?好像不是吧。。。 举个 HTTPS 毫无帮助的例子吧. 任何信息都需要保证安全吗?好像不是吧。。。 好像只有您提到 "任何" 这两个字了吧? TLS 协议本身没有任何漏洞吗?好像不是吧,可能只是目前未发现罢了 这个是神逻辑. 如: 我是活在(黑客帝国的)母体中而不是物理现实中吗? 好像是吧, 可能只是我目前未发现证据罢了. |
53
codesun 2016-06-23 20:41:16 +08:00
@iugo
我觉得我的逻辑不神,你先别激动,且听我说说,你要觉得没道理,再尽情喷,我接受。 我看你这么一段描述,如果我没有理解错,你使用或者说是说服大家一起用 HTTPS 的主要目的是为了安全。 那么,我就着重点看你的“为什么使用 HTTPS ”这一段了。 “ HTTP 是明文传输的, 所以容易被中间人攻击. 使用 HTTPS 可以保护信息安全” 我的反驳是:“ HTTPS 就能完全避免中间人攻击了吗?”,我这么说是有根据的,因为之前看过几篇论文说过这方面的问题,并不是加密了就能解决安全问题。我不是安全领域的,不算懂,只能给出一个简单的例子:中间人发布伪造的证书,然后客户端安装了,这样就不能解决中间人攻击 关于“任何信息都需要保证安全吗?”我想表达的意思是,并不是所有的请求都需要使用 HTTPS ,盲目追求,只会浪费服务器资源,你如果要证据,可以在开启 HTTPS 前后,给 nginx 做个压测,握手也是需要耗时的。 关于“ TLS 协议本身没有任何漏洞吗?”我说错了,应该是已经有发现存在漏洞了,而且不在少数,当然版本不同,漏洞也各有不同,例子之一如下 https://hacked.com/tls-flawed-new-tls-vulnerability-found/ |
54
62900015 2016-06-26 03:39:42 +08:00
@codesun 安全和性能是需要互相妥协的,你说的很对,不一定所有的业务都需要上,关键位置就可以了,另外不同的 SSL 厂商能抗的连接数不一样,压测下你会看到 HTTP 能抗几万, HTTPS 就几 K SSL 挂了。
|
55
iugo OP @codesun 我是这样理解的: 一个东西, 只要有用, 就可以用. 而不是只有完美了, 我们才应该用.
我看到的您的用词是这样的: "完全", "任何". 没什么东西是完全和任何的. 我觉得我之前的回答也不够准确, 重新回答一下: HTTPS 就能完全避免中间人攻击了吗?好像不是吧。。。 不能完全避免, 但能很大程度上减少. 任何信息都需要保证安全吗?好像不是吧。。。 有些信息是必须保证安全的, 有些环境是必须保证安全的. 比如网银登入, 比如运营商劫持, 广告严重的环境. TLS 协议本身没有任何漏洞吗?好像不是吧,可能只是目前未发现罢了 这个逻辑我就不说了. 我觉得不可思议, 但和 HTTPS 本身讨论没什么关系. 1. 再重申一遍, 强调 "完全", "任何" 这样的词是不恰当的. 2. 不是只有完美了才能用, HTTPS 解决 HTTP 的问题, 就能用. 目前国际主流浏览器(Firefox, Chrome, Safari, IE Edge)对更先进的协议 HTTP/2 的支持也有前提, 就是 over TLS, 参考 http://caniuse.com/#feat=http2 --- 另外, 证书存在的意义就是伪造成本非常高. 伪造证书会被浏览器阻止访问, 除非用户强制. 比如 12306.cn 的证书是国际主流浏览器不认的, 因为它自签名, 浏览器会阻止访问. 隐患在于用户会自行安装不安全的根证书. 而又无法避免这些不安全的根证书乱发证书. |