【愚公系列】2022年04月 .NET架构班 032-分布式中间件 Nginx多场景使用问题分析之HTTPS

愚公搬代码 发表于 2022/04/01 10:36:01 2022/04/01
【摘要】 前言 1.HTTPS介绍HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HT...

前言

1.HTTPS介绍

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

2.HTTPS设计目标

HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个。

  1. 数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么。
  2. 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收。
  3. 身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方。

一、Https应用场景

1.证书生成

1.1 使用openSSL工具生成

下载openSSL地址:http://slproweb.com/download/Win64OpenSSL-3_0_1.msi

证书生成j教程地址:https://jingyan.baidu.com/article/6c67b1d6be538c2787bb1e06.html

2.Nginx配置HTTPS

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;
proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m;
limit_conn_zone $server_name zone=perserver:10m;
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        limit_conn perserver 1;
        proxy_cache mycache;
        proxy_pass  http://XT.EBusiness;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache_methods GET HEAD;
        proxy_cache_revalidate on;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_cache_valid any 1m;
        proxy_cache_min_uses 1;
        proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # https 虚拟主机
    server {
        listen       4435 ssl;
        server_name  localhost;

       ssl_certificate      D:/work/net/grpc-cluster/server-cert.pem;
        ssl_certificate_key  D:/work/net/grpc-cluster/server-key.pem;

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

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

        location / {
            proxy_pass  http://YDT.EBusiness;
        }
    }
}

#动态负载均衡配置
upstream XT.EBusiness{
    ip_hash;
    server localhost:5001 max_fails=2 fail_timeout=10s;
    server localhost:5002 max_fails=2 fail_timeout=10s;
    server localhost:5003 backup;
}
}

3.Nginx配置HTTP转发HTTPS

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m;
    limit_conn_zone $server_name zone=perserver:10m;
    server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        limit_conn perserver 1;
        proxy_cache mycache;
        proxy_pass  http://XT.EBusiness;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache_methods GET HEAD;
        proxy_cache_revalidate on;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_cache_valid any 1m;
        proxy_cache_min_uses 1;
        proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # https 虚拟主机
    server {
        listen       4435 ssl;
        server_name  localhost;

       ssl_certificate      D:/work/net/grpc-cluster/server-cert.pem;
        ssl_certificate_key  D:/work/net/grpc-cluster/server-key.pem;

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

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

        location / {
            proxy_pass  http://YDT.EBusiness;
        }
    }
}

#动态负载均衡配置
upstream XT.EBusiness{
    ip_hash;
    server localhost:5001 max_fails=2 fail_timeout=10s;
    server localhost:5002 max_fails=2 fail_timeout=10s;
    server localhost:5003 backup;
    }
}

总结

Nginx作为网关层代理是个很重要部分,HTTPS配置也是Nginx一部分,在Nginx配置HTTPS可以保障系统的安全性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。