• Nginx的安全控制


    安全控制 

    关于web服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx反向代理是安全隔离来提升web服务器的安全,通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,仅留一个入口供代理服务器访问。

    使用SSL对流量进行加密

    HTTPS是一种通过计算机网络进行安全通信的传输协议。它经由HTTP进行通信,利用SSL/TLS建立全通信,加密数据包,确保数据的安全性。

    • SSL(Secure Sockets Layer)安全套接层
    • TLS(Transport Layer Security)传输层安全

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

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

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

    nginx添加SSL的支持

    前置安装

     yum install openssl-devel    # CentOS/RHEL

    如果是使用yum安装的话,默认是有--with-http_ssl_module模块的。

    如果是通过源码安装的话

    1. 将原有/usr/local/nginx/sbin/nginx进行备份
    2. 拷贝nginx之前的配置信息
    3. 在nginx的安装源码进行配置指定对应模块  ./configure --with-http_ssl_module
    4. 通过make模板进行编译
    5. 将objs下面的nginx移动到/usr/local/nginx/sbin下
    6. 在源码目录下执行  make upgrade进行升级,这个可以实现不停机添加新模块的功能

    Nginx的SSL相关指令

    ssl

     ssl:该指令用来在指定的服务器开启HTTPS

    语法ssl_certificate file;
    默认值
    位置http、server
    1. server{
    2. listen 443 ssl;
    3. }

    ssl_certificate

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

    语法ssl_certificate file;
    默认值
    位置http、server

    ssl_certificate_key

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

    语法ssl_ceritificate_key file;
    默认值
    位置http、server

    ssl_session_cache

    语法ssl_sesion_cache off|none|[builtin[:size]] [shared:name:size]
    默认值ssl_session_cache none;
    位置http、server
    • off:禁用会话缓存,客户端不得重复使用会话
    • none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数
    • builtin:内置OpenSSL缓存,仅在一个工作进程中使用。
    • shared:所有工作进程之间共享缓存,缓存的相关信息用name和size来指定

    ssl_session_timeout

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

    语法ssl_session_timeout time;
    默认值ssl_session_timeout 5m;
    位置http、server

     ssl_ciphers

    指出允许的密码,密码指定为OpenSSL支持的格式

    语法ssl_ciphers ciphers;
    默认值ssl_ciphers HIGH:!aNULL:!MD5;
    位置http、server

    可以使用openssl ciphers查看openssl支持的格式。

    ssl_prefer_server_ciphers

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

    语法ssl_perfer_server_ciphers on|off;
    默认值ssl_perfer_server_ciphers off;
    位置http、server

    生成证书

    1. 使用阿里云/腾讯云等第三方服务进行购买。
    2. 使用openssl生成证书

    先要确认当前系统是否有安装openssl

    openssl version

    安装下面的命令进行生成

    1. mkdir /root/cert # 创建目录并切换到该目录
    2. cd /root/cert
    3. openssl genrsa -des3 -out server.key 1024 # 生成带有密码保护的 RSA 密钥
    4. openssl req -new -key server.key -out server.csr # 生成证书签名请求(CSR)
    5. cp server.key server.key.org # 备份私钥文件并移除密码保护
    6. openssl rsa -in server.key.org -out server.key
    7. openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt # 自签名证书

     生成带有密码保护的 RSA 密钥

    openssl genrsa -des3 -out server.key 1024

     这将生成一个加密的 RSA 私钥文件 server.key,其中包含一个 1024 位的密钥。您将被要求输入一个密码来保护私钥文件,可以输入test

    生成证书签名请求(CSR)

    openssl req -new -key server.key -out server.csr

    这将使用私钥文件生成一个证书签名请求文件 server.csr。在生成过程中,您将被要求提供一些与证书相关的信息,例如组织名称、域名等

    • 第一次会要求你输入你之前输入的密钥:test
    • 国家输入:CN
    • 省份:guangdong
    • 城市:guangzhou
    • 组织:gjs
    • 组织的:gjs
    • 域名:test
    • 邮箱地址:1216xx9850@qq.com
    • 密码:test
    • 公司:gjs 

    备份私钥文件并移除密码保护

    1. cp server.key server.key.org
    2. openssl rsa -in server.key.org -out server.key

     这将复制一份原始的私钥文件 server.key,并将其备份为 server.key.org。然后,使用 openssl rsa 命令从备份文件中删除密码保护,并将结果保存回 server.key 文件中。需要输入密钥test

    自签名证书

    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    

     这将使用私钥文件 server.key 和证书签名请求文件 server.csr 来生成一个自签名的 X.509 证书文件 server.crt。该证书的有效期将为 365 天。

    完成上述步骤后,您将在 /root/cert 目录下获得以下文件

    • server.key: 不带密码保护的私钥文件
    • server.crt: 自签名的 SSL 证书文件

    开启SSL实例

    1. server {
    2. listen 443 ssl;
    3. server_name localhost;
    4. ssl_certificate /root/cert/server.cert; # 使用了绝对路径指定证书
    5. ssl_certificate_key /root/cert/server.key; # 使用了绝对路径指定密钥
    6. ssl_session_cache shared:SSL:1m;
    7. ssl_session_timeout 5m;
    8. ssl_ciphers HIGH:!aNULL:!MD5;
    9. ssl_prefer_server_ciphers on;
    10. location / {
    11. root html;
    12. index index.html index.htm;
    13. }
    14. }

     测试

     

  • 相关阅读:
    python文件打包成可执行文件exe的两种方法
    OBS-VirtualCam OBS的虚拟摄像头插件
    注册公司资本认缴和实缴有何区别?
    SSM框架-MyBatis核心配置文件详解与项目补充
    想要可视化动起来?用什么动态数据可视化工具软件
    Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel
    HTML网页设计——轮滑运动体育类人物介绍主题12页面毕业设计网页
    OpenCV C++双目三维重建:双目摄像头实现双目测距
    Maven的常用命令管理项目的生命周期
    03-链表(Linked List)应用分析
  • 原文地址:https://blog.csdn.net/qq_63431773/article/details/133687606