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

原文地址:http://blog.51cto.com/jerrymin/2321548

时间: 2024-10-13 06:50:42

HTTPS配置优化及注意点的相关文章

CentOS下mysql数据库data目录迁移和配置优化

目录迁移 关闭数据库服务 service mysqld stop 复制数据库 mv /var/lib/mysql /data/mysql # 或者使用cp -a复制 # 这两个命令都会带权限到新目录去 修改配置文件 /etc/my.cnf [mysqld] #datadir=/var/lib/mysql ------原系统默认路径 datadir=/data/mysql ------现有路径 #socket=/var/lib/mysql/mysql.sock ------原socket路径现 s

SSH配置优化和慢的解决方法

author: headsen chen date: 2018-08-18  00:28:37 ssh配置优化 vim  /etc/ssh/sshd_config 1,修改root端口 2,不允许root登录 3,禁止空密码登录 4,禁用DNS(解决连接慢的问题) 5,不开启GSSAPI认证 (解决连接慢的问题) 解决第一次连接要输入yes的问题vim  /etc/ssh/ssh_config 原文地址:https://www.cnblogs.com/kaishirenshi/p/9495997

mysql数据库同步时数据一致性的配置优化

据丢失,而在生产环境中, 每一数据都是要尽量不等丢失,所以,为了提高主从数据一致性和稳定性,降低丢失数据的可能,就需要进行一些配置优化,使用一些特别的设定,使得数据安全更好,但是同时也会影响到mysql数据库的性能,所以就需要在安全和性能之间进行取舍.根据使用的具体环境,选择最适合自身的数据库安全设置.下面就一一介绍和列举几个对主从数据复制安全比较重要的几个配置参数:MySQL版本为5.61.master主库上设置:innodb_flush_log_at_trx_commit=0: log bu

Nginx如何进行配置优化?

在日常工作的时候,搭建配置Nginx的时候,我们都会做相应的优化,那一般需要做的配置优化有哪些呢?可能有些小伙伴一听到要进行优化,内心难免有些慌. 今天咱们聊聊Nginx进行常规配置优化,这里需要注意一点,在配置完之后,一定要记得重新加载配置,运行nginx -s reload即可 1. Nginx的压缩输出配置 gzip压缩技术可以把页面大小压缩成原来30%以下,页面变小后,用户浏览页面的时候,数据传输速度就会快得多. 绝大多数都是支持解析gzip过的页面,我们主要优化服务器配置 Nginx的

Linux下使用 github+hexo 搭建个人博客03-hexo配置优化

上两张文章,我们说了 hexo 部署.主题的切换.博文的创建.MarkDown 简单使用和 hexo 部署到 GitHub Pages. 也说了我们会使用 next 主题做为我们后期博客的使用和维护.但是该主题的原生态,可能或多或少不满足我们当前的需求,因此需要我们对其进行优化,达到我们想要的效果. 因此这篇文章和下篇文章主要就是针对主题的优化进行书写的. 注意事项 1.优化完毕或者新建博客后需要 hexo g 生成静态文件: 2.然后重新启动服务,使用命令 hexo s -p 80 3.浏览器

【MySQL优化】MySQL 高并发配置优化基础知识

[MySQL优化]MySQL 高并发配置优化基础知识 MySQL的优化分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化. 一.服务器硬件对MySQL性能的影响 ① 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变. MySQL每秒钟都在进行大量.复杂的查询操作,对磁盘的读写量可想而知.所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量 在100万P

haproxy代理https配置方法

记得在之前的一篇文章中介绍了nginx反向代理https的方法,今天这里介绍下haproxy代理https的方法: haproxy代理https有两种方式:1)haproxy服务器本身提供ssl证书,后面的web服务器走正常的http 2)haproxy服务器本身只提供代理,后面的web服务器走https(配置ssl证书) 第一种方式:haproxy服务器本身提供ssl证书 注意:需要编译haproxy的时候支持ssl编译参数: #make TARGET=linux26 USE_OPENSSL=

Kafka server部署配置优化

Kafka配置优化其实都是修改server.properties文件中参数值 1.网络和io操作线程配置优化 # broker处理消息的最大线程数        num.network.threads=xxx    #  broker处理磁盘IO的线程数        num.io.threads=xxx 建议配置: 一般num.network.threads主要处理网络io,读写缓冲区数据,基本没有io等待,配置线程数量为cpu核数加1. num.io.threads主要进行磁盘io操作,高峰

apache https配置步骤

apache https配置步骤 1.  确认是否安装ssl模块 是否有mod_ssl.so文件 2.  生成证书和密钥 linux下 步骤1:生成密钥 命令:openssl genrsa 1024 > server.key 说明:这是用128位rsa算法生成密钥,得到server.key文件 步骤2: 生成证书请求文件 命令:openssl req -new -key server.key > server.csr 说明:这是用步骤1的密钥生成证书请求文件server.csr, 这一步提很多