nginx ssl配置

小灰灰 2022-07-20 15:04 293阅读 0赞

1. 全站ssl

全站做ssl是最常见的一个使用场景,默认端口443,而且一般是单向认证。

  1. server {
  2. listen 443;
  3. server_name example.com;
  4. root /apps/www;
  5. index index.html index.htm;
  6. ssl on;
  7. ssl_certificate ../SSL/ittest.pem;
  8. ssl_certificate_key ../SSL/ittest.key;
  9. # ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  10. # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  11. # ssl_prefer_server_ciphers on;
  12. }

如果想把http的请求强制转到https的话:

  1. server {
  2. listen 80;
  3. server_name example.me;
  4. rewrite ^ https://$server_name$request_uri? permanent;
  5. ### 使用return的效率会更高
  6. # return 301 https://$server_name$request_uri;
  7. }

ssl_certificate证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。

ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。

ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。

ssl_prefer_server_ciphers on设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

https优化参数

  • ssl_session_cache shared:SSL:10m; : 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是sharedbuildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。 详细参考serverfault上的问答ssl_session_cache。
  • ssl_session_timeout : 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h

设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了。

提示:在生成证书请求csr文件时,如果输入了密码,nginx每次启动时都会提示输入这个密码,可以使用私钥来生成解密后的key来代替,效果是一样的,达到免密码重启的效果:

HTTPS服务器优化

SSL操作需要消耗CPU资源,所以在多处理器的系统,需要启动多个工作进程,而且数量需要不少于可用CPU的个数。最消耗CPU资源的SSL操作是SSL握手,有两种方法可以将每个客户端的握手操作数量降到最低:第一种是保持客户端长连接,在一个SSL连接发送多个请求,第二种是在并发的连接或者后续的连接中重用SSL会话参数,这样可以避免SSL握手的操作。会话缓存用于保存SSL会话,这些缓存在工作进程间共享,可以使用ssl_session_cache指令进行配置。1M缓存可以存放大约4000个会话。默认的缓存超时是5分钟,可以使用ssl_session_timeout加大它。下面是一个针对4核系统的配置优化的例子,使用10M的共享会话缓存:

  1. worker_processes 4;
  2. http {
  3. ssl_session_cache shared:SSL:10m;
  4. ssl_session_timeout 10m;
  5. server {
  6. listen 443;
  7. server_name www.example.com;
  8. keepalive_timeout 70;
  9. ssl on;
  10. ssl_certificate www.example.com.crt;
  11. ssl_certificate_key www.example.com.key;
  12. ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  13. ssl_ciphers HIGH:!aNULL:!MD5;
  14. ...

发表评论

表情:
评论列表 (有 0 条评论,293人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nginx 配置 ssl

    1.1 Nginx如果未开启SSL模块,配置Https时提示错误 原因也很简单,nginx缺少http\_ssl\_module模块,编译安装的时候带上--wit

    相关 nginx 配置ssl

    前言 服务器安全一直是近些年来热门的话题,一个正常的请求发送到服务端之后,服务端将响应结果返回客户端,可以理解此次交互建立了一个请求响应的通道; 如果这个通道不够安全,

    相关 nginx配置ssl

    先生成网关证书 ,仿照CA模式  1 生成私钥,需要密码的  openssl genrsa -des3 -out server.key 1024  2 生成证书请求

    相关 Nginx 配置 ssl 证书

    > 在部署线下测试环境时浏览器会自动将http替换成https,又因为测试环境没有证书经常会导致跳转错误,所以自己配置一个ssl证书就可以避免这个问题。 > 下面记录我在M