Nginx设置TCP上游服务器的SSL配置

 2023-09-06 阅读 13 评论 0

摘要:Nginx设置TCP上游服务器的SSL配置 本文介绍了如何为NGINX Plus和接受TCP连接的负载均衡的服务器组设置SSL 什么是SSL终端 SSL终端意味着NGINX Plus充当与客户端连接的服务器端SSL端点:它执行对请求的解密和对响应的加密,否则后端服务器就必须这样做。该操作称

Nginx设置TCP上游服务器的SSL配置

 

本文介绍了如何为NGINX Plus和接受TCP连接的负载均衡的服务器组设置SSL

 

什么是SSL终端

SSL终端意味着NGINX Plus充当与客户端连接的服务器端SSL端点:它执行对请求的解密和对响应的加密,否则后端服务器就必须这样做。该操作称为终止,因为NGINX Plus关闭了客户端连接,并通过新创建的未加密连接将客户端数据转发到上游组中的服务器。在R6和更高版本中,NGINX Plus对TCP连接和HTTP连接执行SSL终止。

 

先决条件

  • NGINX Plus R6 NGINX Plus或更高版本
  • 具有多个TCP服务器的负载均衡的上游组
  • SSL证书和私钥(获取或自行生成)

 

获取SSL证书

首先,您将需要获取服务器证书和私钥,并将它们放在服务器上。可以从可信证书颁发机构(CA)获得证书,也可以使用SSL库(例如OpenSSL)生成证书。

 

配置NGINX Plus

要配置SSL终止,请在NGINX Plus配置中添加以下指令:

 

启用S​​SL

要启用SSL,请为将连接传递到上游服务器组的TCP服务器指定指令的ssl参数listen

stream {server {listen     12345 ssl;proxy_pass backend;#...}
}

添加SSL证书

要添加SSL证书,请使用ssl_certificate指令指定证书的路径(必须采用PEM格式),并在指令中指定私钥的路径ssl_certificate_key

server {#...ssl_certificate        /etc/ssl/certs/server.crt;ssl_certificate_key    /etc/ssl/certs/server.key;
}

此外,ssl_protocolsand ssl_ciphers指令可用于限制连接并仅包括SSL / TLS的强版本和密码:

server {#...ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers    HIGH:!aNULL:!MD5;
}

ssl_ciphers指令告诉NGINX通知SSL库它喜欢哪种密码。

加快安全的TCP连接

实施SSL / TLS可能会严重影响服务器性能,因为SSL握手操作(客户端和服务器交换一系列消息以验证连接是否可信任)会占用大量CPU。SSL握手的默认超时为60秒,可以使用ssl_handshake_timeout伪指令重新定义。我们不建议将此值设置得太低或太高,因为这可能导致握手失败或等待握手完成的时间较长:

server {#...ssl_handshake_timeout 10s;
}

优化SSL会话缓存

创建适用于每个SSL / TLS连接的会话参数的缓存可以减少握手次数,从而可以显着提高性能。缓存是通过ssl_session_cache伪指令设置的:

ssl_session_cache;

默认情况下,NGINX Plus使用built-in会话缓存的类型,这意味着您的SSL库中内置了缓存。这不是最佳选择,因为这样的缓存只能由一个工作进程使用,并且可能导致内存碎片。设置ssl_session_cache指令以shared在所有工作进程之间共享缓存,这可以加快以后的连接速度,因为连接设置信息是已知的:

ssl_session_cache shared:SSL:1m;

作为参考,一个1 MB的共享缓存可以容纳大约4,000个会话。

默认情况下,NGINX Plus将缓存的会话参数保留五分钟。将的值ssl_session_timeout增加到几个小时可以提高性能,因为重新使用缓存的会话参数可以减少耗时的握手次数。当您增加超时时,缓存需要更大,以容纳产生的更多缓存参数。对于以下示例中的4小时超时,适合使用20 MB的缓存:

ssl_session_timeout 4h;

如果超时长度增加,则需要更大的缓存来存储会话,例如20 MB:

server {#...ssl_session_cache   shared:SSL:20m;ssl_session_timeout 4h;
}

这些行创建了一个20 MB的内存中高速缓存来存储会话信息,并指示NGINX Plus在添加会话参数后的4小时内重新使用高速缓存中的会话参数。

 

会话票证 Session_Tickets

会话票证是会话缓存的替代方法。会话信息存储在客户端,因此无需服务器端缓存即可存储会话信息。当客户端恢复与后端服务器的交互时,它会显示会话票证,并且不需要重新协商。将ssl_session_tickets指令设置为on

server {#...ssl_session_tickets on;
}

将会话票证用于上游组时,必须使用相同的会话密钥初始化每个上游服务器。最佳做法是经常更改会话密钥,我们建议您实施一种机制,以在所有上游服务器之间轮换共享密钥:

server {#...ssl_session_tickets on;ssl_session_ticket_key /etc/ssl/session_ticket_keys/current.key;ssl_session_ticket_key /etc/ssl/session_ticket_keys/previous.key;
}

完整的例子

stream {upstream stream_backend {server backend1.example.com:12345;server backend2.example.com:12345;server backend3.example.com:12345;}server {listen                12345 ssl;proxy_pass            stream_backend;ssl_certificate       /etc/ssl/certs/server.crt;ssl_certificate_key   /etc/ssl/certs/server.key;ssl_protocols         SSLv3 TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers           HIGH:!aNULL:!MD5;ssl_session_cache     shared:SSL:20m;ssl_session_timeout   4h;ssl_handshake_timeout 30s;#...}
}

在此示例中,该server块中的指令指示NGINX Plus终止并解密来自客户端的安全TCP流量,并将未加密的流量传递给stream_backend由三台服务器组成的上游组。

伪指令的ssl参数listen指示NGINX Plus接受SSL连接。当客户端请求安全的TCP连接时,NGINX Plus将启动握手过程,该过程将使用ssl_certificate指令指定的PEM格式证书,指令指定的证书私钥以及and 指令ssl_certificate_key列出的协议和密码。ssl_protocolsssl_ciphers

一旦建立了安全的TCP连接,NGINX Plus就会根据ssl_session_cache指令缓存会话参数。在该示例中,会话高速缓存在所有工作进程(shared参数)之间共享,大小为20 MB(20m参数),并且将每个SSL会话保留4小时以供重用(ssl_session_timeout指令)。

要了解有关NGINX Plus的更多信息,请参阅我们的商业订阅的描述。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/3490.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息