nginx 配置ssl

前言

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

如果这个通道不够安全,比如会话被劫持,可能就会出现请求参数,或响应结果被篡改,这就比较危险了;

因此解决WEB安全问题中一个比较重要的点就是确保会话安全,在日常的开发中,使用nginx做反向代理服务器很常见,nginx可以说充当了网关的作用,从nginx这一层做好防护很重要,可以理解为通过nginx,将传递到后端的请求做一层安全防护,仅留一个入口供代理服务器访问;
在这里插入图片描述

SSL简介

  • 即常用的http请求转变成https请求,简单来说两个都是HTTP协议,只不过https是
    身披SSL外壳的http;
  • HTTPS是一种通过计算机网络进行安全通信的传输协议,它经由HTTP进行通信,利用SSL/TLS建立全通信,加密数据包,确保数据的安全性;

1、SSL(Secure Sockets Layer)安全套接层;
2、TLS(Transport Layer Security)传输层安全;

上述两个是为网络通信提供安全及数据完整性的一种安全协议,TLS和SSL在传输层和应用层对网络连接进行加密;

总结来说为什么要使用https:

http协议是明文传输数据,存在安全问题,而https是加密传输,相当于 http+ssl,并且可以防止流量劫持

Nginx要使用SSL,需满足一个条件,即需添加一个模块–with- http_ssl_module ,而该模块在编译的过程中又需要OpenSSL的支持,这个在安装之初,在 ./configure 命令时可以指定;

下面来看ssl的使用的完整步骤

nginx添加对SSL的支持

  • 将原有/usr/local/nginx/sbin/nginx进行备份

避免后续安装SSL出现问题时回退找不到文件

在这里插入图片描述

  • 拷贝nginx之前的配置信息
  • 在nginx的安装源码进行配置指定对应模块 ./configure --with-http_ssl_module
    在这里插入图片描述
    在这里插入图片描述
  • 通过make模板进行编译

上面执行完成后,直接在当前目录执行make即可,等待其编译完成即可

在这里插入图片描述

  • 将objs下面的nginx移动到/usr/local/nginx/sbin下
    在这里插入图片描述
    在这里插入图片描述
  • 在源码目录下执行 make upgrade进行升级

通过该命令可以实现不停机添 加新模块的功能,最后通过下面的命令查看时,就包含了ssl模块

在这里插入图片描述

SSL常用命令

1)ssl

该指令用来指定服务器开启HTTPS,可以使用 listen 443 ssl,后面这种方式更通用些

在这里插入图片描述

配置格式:

server{
    
    
	listen 443 ssl;
}

2)ssl_certificate

为当前这个虚拟主机指定一个带有PEM格式证书的证书

在这里插入图片描述

3) ssl_certificate_key

该指令用来指定PEM secret key文件的路径

在这里插入图片描述

4) ssl_session_cache

该指令用来配置用于SSL会话的缓存

在这里插入图片描述

5) off

禁用会话缓存,客户端不得重复使用会话

6) none

禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数

7) builtin

内置OpenSSL缓存,仅在一个工作进程中使用

  1. shared

所有工作进程之间共享缓存,缓存的相关信息用name和size来指定

  1. ssl_session_timeout

开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间

在这里插入图片描述
10) ssl_ciphers

指出允许的密码,密码指定为OpenSSL支持的格式(可以使用openssl ciphers查看openssl支持的格式)

在这里插入图片描述

  1. ssl_prefer_server_ciphers

该指令指定是否服务器密码优先客户端密码

在这里插入图片描述

生成SSL证书

  • 方式1:使用阿里云等第三方服务购买证书,一般用于生产环境的使用,阿里云提供了一个免费的SSL证书,可以使用一年(这个网上有很多资料,本篇就不再赘述了);
  • 方式2:使用openssl生成证书;

下面来说说使用openssl

1、确认当前系统是否有安装openssl

在这里插入图片描述

2、使用下面的命令生成SSL文件

mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

生成过程,只需要按照提示步骤一步步进行即可

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

nginx开启SSL访问

正常情况下,启动nginx之后,监听80端口,访问所在服务器,效果如下
在这里插入图片描述

默认情况下,它使用http形式访问,如果前面使用https,将会出现下面这样
在这里插入图片描述

进入 /usr/local/nginx/conf目录,即源码安装目录,将下面的内容配置到 nginx.conf文件中

server {
    
    
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /root/cert/server.crt;
        ssl_certificate_key  /root/cert/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
    
    
            root   html;
            index  index.html index.htm;
        }
    }

注意:这段配置放到http模块下

重启nginx之后,再次通过https开头拼接IP地址访问下nginx,观察下效果

在这里插入图片描述

可以发现,此时出现了上面的效果,这个不安全的链接显示是因为通过服务器自身沈城的ssl证书未经过认证,然后继续访问,就能看到nginx的主页欢迎界面
在这里插入图片描述

通过以上的方式,我们就完整演示了ssl从安装,配置,生成以及到nginx中配置ssl的完成步骤。

猜你喜欢

转载自blog.csdn.net/zhangcongyi420/article/details/125028405