Nginx添加SSL模块


引言:在搭建Nginx服务时,我们经常会遇到在服务安装后向其添加一些特殊功能的模块,使其支持一些功能,本文将介绍在实际生产中经常用到的一个模块SSL模块

一.SSL介绍

1.1SSL概述

SSL(Security Socket Layer)是一个安全协议,为基于TCP(Transmission Control Protocol)的应用层协议提供安全连接,SSL介于TCP/IP协议栈第四层和第七层之间。主要提供私密性、完整性和身份验证;我们常见的就是 SSL为HTTP(Hypertext Transfer Protocol)协议提供安全连接。SSL协议是一种在两个机器之间提供安全通道的协议,它具有保护数据传输以及识别通信机器的功能。

1.2SSL证书

SSL证书是数字证书的一种。因为配置在服务器上,也称为SSL服务器证书。SSL证书由受信任的数字证书颁发机构颁发,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能
SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了。即通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露,保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。

1.3HTTPS

HTTP over SSL 简写https,加密网页浏览是设计SSL的初衷,HTTP也是第一个使用SSL保障安全的应用层协议。
使用https://来标识HTTP over SSL,因此我常见的https的全称就是HTTP over SSL。后来HTTPS在RFC2818被标准化。HTTPS工作在443端口,而HTTP默认工作在80端口。

1.4SSL工作原理

在这里插入图片描述

  1. 浏览器发送一个https的请求给服务器;
  2. 服务器要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥;
  3. 服务器会把公钥传输给客户端;
  4. 客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
  5. 客户端把加密后的随机字符串传输给服务器;
  6. 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
  7. 服务器把加密后的数据传输给客户端;
  8. 客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

二.创建SSL证书

2.1程序安装

检查是否安装openssl程序

rpm -q openssl openssl-devel

在这里插入图片描述
若没有安装,则

yum install -y openssl openssl-devel

2.2生成证书

1.创建密钥目录,此处建议放在nginx/conf目录下

mkdir -p /usr/local/nginx/conf/ssl_key
切换目录
cd /usr/local/nginx/conf/ssl_key

2.创建私钥

openssl genrsa -idea -out server.key 2048 

在这里插入图片描述
3.生成证书

openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

在这里插入图片描述

三.Nginx配置

nginx -V 查看nginx服务配置,查看是否安装ssl模块
在这里插入图片描述

3.1添加ssl模块

切换到服务安装目录
cd /opt/nginx-1.20.2/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module    #为ssl模块

在这里插入图片描述
make
注:因为之前编译了nginx,所以此时不用make install
停止服务 systemctl stop nginx.service
备份源服务文件

mv /usr/local/nginx/sbin/nginx   /usr/local/nginx/sbin/nginx.old
[root@xiayan nginx-1.20.2]# cp objs/nginx  /usr/local/nginx/sbin/nginx

再次查看nginx服务配置
在这里插入图片描述

3.2添加SSL证书

vim /usr/local/nginx/conf/nginx.conf

server {
    
    
        listen       443 ssl;     #SSL 访问端口为443
        server_name  www.xiayan.com; #证书绑定域名
        charset utf-8;
        access_log  /var/log/nginx/nginx.log; #日志文件
        ssl_certificate ssl_key/server.crt;   #证书文件名称 
	ssl_certificate_key ssl_key/server.key; #私钥文件名
	#此处文件若不在conf目录下,则需填写文件绝对路径
        ssl_session_timeout 5m;        
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
	location / {
    
    
            root   html;
            index  index.html index.htm;
        }
      }
mkdir -p /var/log/nginx/nginx.log  #创建日志文件目录

在这里插入图片描述

3.3将http请求重定向到https

#在server全局设置中添加重定向转发规则
rewrite (.+) https://www.xiayan.com permanent; 

在这里插入图片描述

检查配置文件是否有问题,并重启服务
向本地hosts文件,添加主机映射地址
在这里插入图片描述

四.测试

使用本机或者虚拟主机,访问www.xiayan.com,看是否跳转https://
博主使用的是w10虚拟主机,这里需要改下主机映射
在这里插入图片描述
打开浏览器访问
在这里插入图片描述
因为它不是由已配置为信任浏览器的证书颁发机构签名的证书,所以会报错。单机继续
在这里插入图片描述

五.总结

1.简单来说,SSL协议为http提供了一种加密的传输协议https
2.在实际生产中,我们常将http的请求重定向为https的。比如我们访问百度,CSDN等等网站时,地址都会转为https
3.因本文使用的是自创的ssl证书,是不受浏览器信任的。在实际生产环境中,可以向专门颁发ssl证书的机构进行申请,然后将下载的证书放到nginx配置文件中,添加配置即可

猜你喜欢

转载自blog.csdn.net/weixin_44175418/article/details/125033784