首页 > 系统相关 >nginx开启更为安全的tls1.3

nginx开启更为安全的tls1.3

时间:2023-06-04 18:05:08浏览次数:51  
标签:ssl -- tls1.3 开启 patch nginx 域名 etc


随着互联网安全越来越受到重视,越来越多的网站选择启用https来保证数据的加密传输,TLS1.2发布于2008年8月,至今正好有10年,所以新协议TLS1.3呼之欲出。Google chrome在最近的版本更新中也开始逐步对TLS1.3进行支持,TLS1.3对于TLS1.2有重大改写,提高了安全性并且提高了速度,所以升级还是很有必要的,本文尝试在nginx中开启TLS1.3.

 

关于TLS1.3的科普可以看下面的页面

https://wiki.openssl.org/index.php/TLS1.3

https://zhuanlan.zhihu.com/p/28850798

 

我这里用的系统是Debian 8

 

第一步:安装依赖

$ apt-get install git gcc make build-essential zlib1g-dev libpcre3-dev

第二步:下载源码和补丁

$ mkdir -p /usr/src

$ cd /usr/src

$ git clone git://git.openssl.org/openssl.git openssl

$ git clone https://github.com/hakasenyang/openssl-patch.git openssl-patch

$ git clone https://github.com/kn007/patch.git nginx-patch

$ wget https://nginx.org/download/nginx-1.15.0.tar.gz

$ tar zxvf ./nginx-1.15.0.tar.gz

第三步:打补丁

1,给OpenSSL打补丁,补丁的意义在于使OpenSSL支持最新的TLS1.3.

补丁地址:https://github.com/hakasenyang/openssl-patch

$ cd /usr/src/openssl

$ patch -p1 < ../openssl-patch/openssl-equal-pre8_ciphers.patch

 

2,给Nginx打补丁,nginx 补丁添加SPDY支持,添加HTTP2 HPACK编码支持,添加动态TLS记录支持

补丁地址:https://github.com/kn007/patch

fix_nginx_hpack_push_error 补丁修复nginx的http2 push和http2 hpack兼容性问题

nginx_auto_using_PRIORITIZE_CHACHA 补丁添加在使用OpenSSL1.1.1时SSL_OP_PRIORITIZE_CHACHA的支持。

$ cd /usr/src/nginx-1.15.0

$ patch -p1 < ../nginx-patch/nginx.patch

$ patch -p1 < ../nginx-patch/fix_nginx_hpack_push_error.patch

$ patch -p1 < ../nginx-patch/nginx_auto_using_PRIORITIZE_CHACHA.patch

第四步:编译安装

$ ./configure \

--sbin-path=/usr/sbin/nginx \

--conf-path=/etc/nginx/nginx.conf \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--with-openssl=../openssl \

--with-http_v2_module \

--with-http_v2_hpack_enc \

--with-http_spdy_module \

--with-http_ssl_module \

--with-http_gzip_static_module \

--http-log-path=/var/log/nginx/access.log \

--error-log-path=/var/log/nginx/error.log

$ make

$ make install

Nginx的可执行文件安装在/usr/sbin/,Nginx配置文件在/etc/nginx/里

第五步:配置

 

1,修改Nginx全局配置:

将以下内容填入:/etc/nginx/nginx.conf

worker_processes auto;
pid /var/run/nginx.pid;
error_log  /var/log/nginx/error.log;
events {
  use epoll;
  multi_accept on;
  worker_connections 1024;
}
http {
    charset utf-8;
    include /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /var/log/nginx/access.log;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 60;
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 2;
    gzip_disable  "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
    include /etc/nginx/vhost/*.conf;
}

2,修改Nginx站点配置

我们已经在全局配置里设置了包含/etc/nginx/vhost/目录下的conf文件

$ mkdir -p /etc/nginx/vhost

在然后/etc/nginx/vhost/里创建站点配置,这里统一用“域名”文字代替真实域名

server {
  listen 80;
  server_name 域名;
  root /wwwroot/域名;
  location / {
    index  index.html;
  }
}

这样HTTP的站点配置就弄好了,不过还站点还没页面,我们可以先把Nginx的欢迎页面给放进去

mkdir -p /wwwroot/域名

$ cp /usr/local/nginx/html/index.html /wwwroot/域名/

$ nginx

启动Nginx后HTTP页面就正常了,打开就能看到欢迎页面。

 

第六步:签发证书

 

配置HTTPS首先要有证书,我这里是使用acme.sh自动颁发让我们加密的证书

1,安装工具:

apt-get install cron socat

2,获取acme.sh:

curl  https://get.acme.sh | sh

3,生成证书:

使用http方式验证域名,这是我们先搭建HTTP站点的原因,接下来指定域名,指定站点目录,开始签发

acme.sh --issue -d 域名 --webroot /wwwroot/域名/ --keylength ec-256 --nginx

4,复制证书:

证书已经签发,保存在~/.acme.sh/里

$ acme.sh --ecc --installcert -d 域名 \

        --key-file /etc/nginx/ssl/域名.key \

        --fullchain-file /etc/nginx/ssl/域名.cer \

        --reloadcmd "nginx -s reload"

指定域名,指定证书保存目录,我这里设置在/etc/nginx/ssl/,指定Nginx重载命令,如果签发的不是ECC证书,把--ecc参数去掉

这样使用acme.sh就完成了证书的签发,如果证书快要过期了,脚本会自动更新证书

脚本自动更新,可以使用以下命令

$ acme.sh --upgrade --auto-upgrade

 

第七步:HTTPS站点配置

 

我给OpenSSL打的是pre8_ciphers补丁,所以配置文件如下:

server {
  listen      80;
  server_name 域名;
  return 301 https://域名$request_uri;
}
server {
  listen 443 ssl http2;
  server_name 域名;
  root /wwwroot/域名;
  ssl_certificate       /etc/nginx/ssl/域名.cer;
  ssl_certificate_key   /etc/nginx/ssl/域名.key;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers [TLS13+AESGCM+AES128|TLS13+AESGCM+AES256|TLS13+CHACHA20]:[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES;
  ssl_ecdh_curve X25519:P-256:P-384;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:50m;
  ssl_session_timeout 1d;
  ssl_session_tickets on;
  ssl_stapling on;
  ssl_stapling_verify on;
  add_header Strict-Transport-Security max-age=15768000;
  location / {
    index  index.html;
    http2_push /style.css;
  }
  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ {
    expires 30d;
  }
  location ~ .*\.(js|css)?$ {
    expires 15d;
  }
  location ~ /.git/ {
    deny all;
  }
}

以上就是完整的站点配置文件,覆盖/etc/nginx/vhost/域名.conf后,使用nginx -s reload重载Nginx再打开站点就能看到HTTPS的页面了

验证一下:

在Chrome 65或更新的版本中,打开开发者工具的安全菜单,就能在里面看到站点是否以TLS1.3连接。

nginx开启更为安全的tls1.3_nginx

后记:随着网络技术的发展,网络安全已经变得和我们的生活息息相关,我们需要新的技术来保护我们的隐私,而网站的站长更应该及时更新以保证用户数据的私密性,所以各位站长赶快升级吧。

郑重说明:利用本文做任何违法事情,与本人和合天智汇无关,资料仅供参考与学习。

nginx开启更为安全的tls1.3_nginx_02


nginx开启更为安全的tls1.3_Nginx_03

nginx开启更为安全的tls1.3_nginx_04

标签:ssl,--,tls1.3,开启,patch,nginx,域名,etc
From: https://blog.51cto.com/u_14601424/6411410

相关文章

  • 安装 Nginx 修改默认端口
    用远程工具连接我们上次购买的机器,这里我要介绍一个知识点,博主使用的工具是MobaXterm,这个工具有一个多操作的功能,在下图的位置可以开启多操作,然后连接你的服务器机子即可:首先我们将机子里面的依赖源都更新一下,在去安装Nginx,在控制台输入如下命令进行更新:apt-getupdate安装Nginx......
  • winows 下iis+nginx +php 部署
    我们服务器使用的server2008,由于iis里还有asp.net网站,php就想用iis做代理转发到nginx来处理请求。第一步:我为了省事,直接安装的phpstudy 下载地址:https://www.xp.cn/第二步:安装好后,设置运行fast-cgi,可以使用以下命令做bat,指定端口运行fast-cgi,我指定端口为9003ECHOSt......
  • 使用openresty替换线上nginx网关之openresty安装细节
    背景线上跑了多年的一个网关业务,随着部门的拆分,逐渐有了一个痛点。该网关业务主要处理app端请求,app端发起的请求,采用http协议,post方法,content-type采用application/x-www-form-urlencoded,表单中有一个固定的字段,叫功能号,即funcNo=1000100这样,然后表单中其他业务字段就根据funcNo......
  • Nginx日志
    nginx.conf中有关访客日志定义如下#log_format#创建日志格式,名为mainlog_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x......
  • fastDFS + nginx安装
    一、环境centos7.6二、下载安装包1、下载fastdfscd/usr/local/srcwgethttps://github.com/happyfish100/fastdfs/archive/refs/tags/V6.07.tar.gz-Ofastdfs-6.07.tar.gz2、下载libfastcommonwget-Olibfastcommon-1.0.53.tar.gzhttps://github.com/happyfis......
  • 手把手docker安装nginx
    记录下一步步流程,没有使用dockerfile,直接命令安装。1、下载nginx镜像,不指定版本默认拉取最新版本dockerpullnginx 2、创建nginx挂载目录,目录可以自己随便建mkdir-p/usr/local/nginx 3、启动nginx容器,如果非80端口则使用自己实际端口dockerrun--name......
  • Hadoop-3.3.5单节点开启Kerberos认证
    1、Hadoop单节点部署部署过程看官方文档即可https://hadoop.apache.org/为增加执行命令的便利性,添加hadoop的环境变量:vim/etc/profile.d/hadoop.shexportHADOOP_HOME=/usr/local/hadoop-3.3.5exportPATH=$PATH:$HADOOP_HOME/binexportPATH=$PATH:$HADOOP_HOME/sbinex......
  • nginx.conf中可以配置多个server_name吗
    是的,nginx.conf中可以为每个虚拟主机配置多个server_name。server_name指令用于指定虚拟主机的域名或IP地址。以下是一个简单的配置示例,其中为两个不同的虚拟主机配置了多个server_name:http{server{listen80;server_nameexample.comwww.example.com;其他设置}......
  • Nginx的动静分离和平滑升级的操作步骤
    Nginx动静分离和平滑升级拓扑图:推荐步骤:在Centos01上安装Nginx服务,使用www.bdqn.com访问Nginx在Centos02配置DNS服务器使用,创建bdqn.com域和benet.com域分别添加主机指向Nginx主机IP地址和LAMP主机IP地址在Nginx服务器配置动静分离,静态数据图片访问Nginx动态php访问跳转到LAMP在Cen......
  • Nginx动静分离和平滑升级
    拓扑图:推荐步骤:在centos01安装nginx服务,使用bdqn访问nginx在centos02配置dns服务器使用,创建bdqn域和benet域分别添加主机只想nginx主机IP地址和LAMP主机IP地址在nginx服务器配置动静分离,静态数据图片访问Nginx动态php访问跳转道LAMP在centos01安装新版nginx实现平滑升级,配置nginx监......