1,私钥和证书
1.1 私钥必须足够长
RSA 证书目前应用最为广泛,RSA 2048能够获得112bit的安全,RSA 3072 能够获得128bit的安全。
ECDHE 256即可获得128bit的安全。
RSA需要消耗大量的计算资源,ECDHE消耗的资源则要少的多。
还有少量的很老旧浏览器只能使用RSA,但是目前浏览器都支持ECDHE。
ECDHE将在未来替换RSA,因此,目前网站最好是配置RSA和ECDHE双证书。
1.2 严密保管私钥
必须在一个可信的设备上面产生私钥,不能由CA来产生。
有条件的话,使用HSM来保管私钥
经常更新证书。
1.3 从可信的CA获取证书
可信CA必须有可以被信赖的安全历史记录
CA必须提供 CRL(Certificate Revocation List),OCSP (online Certificate Status Protocol)
企业用户,必须使用EV证书
1.4 使用强的证书签名算法
证书的强度依赖于两点:
a,用于签名证书的私钥的强度
b,用于签名的hash算法的强度
目前,SHA1已经不安全,必须至少使用SHA256
2,配置
正确的配置目的:可以给访问者信心,使用正确的密码套件,排除已知弱点。
2.1 使用完整的证书链
EV证书
DV证书
2.2 使用安全的协议
SSL v2,不安全,不能使用(DROWN攻击)
SSL v3,不安全,不能使用(POODLE攻击)
TLS v1.0,老旧协议,不推荐使用,存在一些问题
TLS v1.1,无已知安全问题,但使用的算法不够新
TLS v1.2,推荐使用,无已知安全问题,能够支持AEAD
TLS v1.3,正处于draft21,致力于去掉过时的、不安全的特性,提供更好的性能、更安全的连接
2.3 使用安全的cipher suites
首选AEAD 套件:支持强认证、密钥交换、完美前向安全、至少128bit的安全加密。
为了支持一些老旧的客户端,服务端也要提供一些弱的套件。
以下加密操作必须避免:
a,不提供认证的ADH 套件
b,Export 套件不安全
c,低于128bit的加密
d,rc4
e,3DES 又慢又弱
2.4 选择最佳的cipher suites
客户端发送支持的cipher suites后,服务器应该从里面选择一个最佳的支持的cipher suites来建立连接
2.5 使用前向安全
前向安全:连接的安全不依赖于服务器的私钥,每个连接都有不同的加密密钥。避免私钥被盗后,监听者可以将之前保存的报文恢复。
使用ECDHE来保证前向安全。推荐使用ECDHE P-256,是一个又好又块的曲线。
不能用RSA 密钥交换。
3,性能配置
3.1 避免过高的安全配置
RSA 2048,ECDHE 256即可。再高的配置并不能带来更好的安全,但是带来极高的资源消耗。
3.2 会话重用
可以节约服务器资源,同时加速连接建立,改善客户端体验。
3.3 优化网络
TLS的延迟主要是网络(服务器端cpu要么够用,要么直接拒绝服务,不是造成延迟的主要原因)
使用HTTP2,CDN
3.4 使用OCSP stapling
OCSP 会导致TLS握手时,客户端要与CA建立连接来查询证书有效性,消耗额外的RTT,导致时间消耗。
OCSP stapling将此操作在服务器端完成,并在握手时返回给客户端,避免额外的RTT。
如果CA的OCSP responder性能、可靠性不行,OCSP stapling将会带来很大的性能提升。
4 HTTP 和应用安全
4.1 加密所有东西
4.2 避免混用加密和不加密的内容,尤其不能在同一个页面混用
4.3 secure cookies
4.4 secure http compression
2012 CRIME 攻击证明,TLS不能使用压缩。
4.5 部署 HSTS
HTTP Strict Transport Security,在http响应里面,加入一个特殊的头,指示浏览器使用。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
效果:
访问 http:www.sample.com时,不是先访问http:www.sample.com,然后服务器返回302跳转到https:www.sample.com,然后客户端再访问https:www.sample.com;而是直接就在客户端本地就访问https:www.sample.com。
可以避免tcp握手,http请求,节约时间;同时,避免浏览器显示证书警告。
http://blog.csdn.net/cteng/article/details/52224344
网友评论