HTTPS配置优化及注意点

Nginx官网反向代理时配置SSL证书,需要enable ngx_http_ssl_module模块,且需要支持的openssl开发版,默认配置参数比较少,但是可以根据实际情况对性能及安全性做成优化,具体如下!

一、SSL参数具体优化(这里只填主要的)

1. ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;

苹果APP只支持TLSv1.2,会优先使用TLSv1.2,考虑到客户端兼容性,其他2各也加上

2. ssl_certificate_key ssl/minminmsn.comsha256.key;

私钥,服务器加密使用

3. ssl_certificate ssl/minminmsn.comsha256.crt;

证书,客户端解密使用,服务器证书和中间证书合并到一个文件,不需要根证书;另外1.7.3版本增加了新指令ssl_password_file可以支持带密码的私钥

4. ssl_session_cache shared:SSL:10m;

会耗费一部分内存,1m可以同时保存4000个会话,10m理论支持4万个会话,注意这个改动后需要重启 nginx才会生效,nginx启动时会申请资源,一般分配后比较难修改,内存空间不足时老的会话自动清理用于新的会话

5. ssl_session_timeout 60m;

考虑到APP操作习惯及安全性暂定60分钟,这个默认5分钟,一般为30分钟到4小时,如果是网页形式可以时间更长一般不超过24小时,多了有安全隐患

6. ssl_prefer_server_ciphers on;

让服务器选择要使用的算法套件,这样避免客户端选择低安全的算法造成***

7. ssl_ciphers (共18个,ECDHE、DHE、AES开头个6个)

"ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4 ";
这18个算法是通过TLS版本和考虑到安全和性能及各种客户端兼容性默认选择ECDHE-RSA-AES128-GCM-SHA256,另外向哪些已经确认不安全的算法(如MD5、RC4、DES)会直接拒绝防止***根据客户端兼容性来降级安全算法,这里是安全和性能的核心,需要长期关注定期更新。另外特别注意的是HTTPS里面耗时的有两个地方一个是网络方面的RTT就是延时,一个是密钥交换优化需要在这两个地方下功夫

二、重点注意事项

1. SHA256签名算法支持最少XPSP3和Android2.3版本
2. 服务器密码套件配置优先,这样更安全
3. AES可以和GCM已验证套件一起使用,建议TLS协议中只使用GCM套件,不使用CBC套件
4. 前向保密 ECDHE套件
5. 性能GCM套件是最快的
6. SNI服务器名称指示,2006年后才加入TLS中,支持一个IP绑定多个域名,但是域名过多,证书也会变大,通配域名理论上不能超过上百域名;另外SNI有的客户端不支持例如IE7.0以下、Windows XP、Mac OS版要求最低X 10.5.6,早期Android版本,Nginx 0.5.32及后续版本,Openssl0.98f(0.98j开始默认支持SNI)
7. 会话缓存,例如一个小时,Twitter为例,12小时会更新一次密钥36小时候删除
8. 分布式会话缓存,https使用ip_hash,保证同一个用户始终分配到统一服务器上
9. Cookie安全问题
10. HSTS可以解决不安全到Cookie,HTTPS stripping***,相同网站内的混合内容问题。HSTS可以禁止浏览器使用无效证书。最好效果是包括子域名
11. CSP,允许网站控制在HTML页面中嵌入的资源用什么协议来对抗XSS***
12. Openssl 1.0.1版本后开始支持,协议降级保护,使用Openssl最新库,性能明显优化,但是也不能盲目升级1.0.1版本后才出现心脏出血漏洞,1.0.2版本后会输出密钥强度,系统自带Openssl-1.0.1e版本,官网Openssl三大版本最新版本1.1.0c、1.0.2j、1.0.1u
13. 2010 Google数据TLS计算只占CPU负载的不到1%,每个连接只占不到10KB的内存,以及不到2%的网络开销
14. initcwnd初始拥塞窗口调优ip route change  59.151.116.115 route change  initcwnd 10 
15. net.ipv4.tcp_slow_start_after_idle = 0  改成0防止空闲时慢启动,HTTP长连接
16. 保持TCP连接时间越长,传输越快,有了长连接,可以最小化TLS开销,同时也提高了TCP性能。HTTP/1.1默认开启保持活动状态(keep-alive)
17. SNI 机制,解决server 单ip支持多host https
18. 尽早完成握手,cdn与客户端建立tls
19. 让服务器支持HTTP/2,Nginx 的版本需要大于1.9.5,同时OpenSSL的版本需要大于1.0.2j
20. Nginx不会对反向代理的后端做证书验证,当后端服务器是公网服务器就会有安全缺陷,Nginx 1.8.x版本后支持后端证书验证
21. 线上Tengine2.1.0版本(Nginx1.6.2),线上Tengine2.2.0版本(Nginx1.8.1)支持HTTP2.0,新版本出来20来天等稳定一段时间后再升级
22. HTTPS总共需要三个往返(TCP一个,TLS二个),RTT大约30毫秒的用户,HTTPS大约需要90毫秒完成连接建立,RTT要是比较大,这个建立连接的时间将会大得多
23. TLS建立连接的耗时对比:直接TLS连接设置3*90ms=270ms,通过CDN进行的TLS连接设置(使用连接池)3*5ms=15ms  用户到CDN节点RTT 5ms,CDN节点到服务器RTT 85ms,RTT为联合往返时间
24. TLS最大的成本除了延迟以外,就是用于安全参数协商的CPU密集型加密操作,即密钥交换,而密钥交换的CPU消耗很大程度上取决于服务器选择的私钥算法、密钥长度和密钥交换算法建议使用这个TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(百度,京东,阿里都是这个),由于按照服务器端优先级为准,这个算法应放在ssl_ciphers:ECDHE-RSA-AES128-GCM-SHA256第一位
25. 证书链里证书越少越好,这样速度更快、
26. TLS回使DsS***更加容易成本更低,安全风险少量的可以限制连接,大量的需要资源超配或第三方援助才行
27. HSTS考虑到客户端兼容性和目前没有全部域名HTTPS,现在没有开启,后续再开启
28. 默认站点可以对不正确域名的请求返回错误消息listen 443 ssl default_server;不需要配置server_name,所有未匹配的请求都会进入默认站点server_name “”;
29. 服务器集群且不希望部署共享票证密钥时,可以ssl_session_tickets off;这个从1.5.9版本开始支持,默认不配置就行集群总体上会话票证弊大于利
30. Http转Https最节省资源的配置方法  return https://$host$request_uri;
31. TLS缓冲区调优ssl_buffer_size默认16KB,减少TLS缓冲区大小,可以显著减少首字节时间例如配置1400字节,注意会降低吞吐量,访问量大且数据为图片等大数据时的域名不需要降低
32. TLS使用情况监控日志可以加变量$ssl_session_reused(1.5.10后支持),根据会话恢复率可以了解TLS会话缓存的工作性能,并设置TLS日志格式 
33. log_format ssl “$time_local $server_name $remote_addr $connection $connection_requests $ssl_protocol $ssl_cipher $ssl_session_id $ssl_session_reused”;
34. Ssl日志位置也分开 access_log /data/ssllog/dom
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容