• Nginx集群之SSL证书的WebApi微服务


    目录

    1       大概思路... 1

    2       Nginx集群之SSL证书的WebApi微服务... 1

    3       HTTP与HTTPS(SSL协议)... 1

    4       Openssl生成SSL证书... 2

    5       编写.NET WebApi 3

    6       部署WebApi到局域网内3台PC机... 5

    7       Nginx集群配置搭建... 6

    8       运行结果... 8

    9       总结... 9

    1       大概思路

    l  Nginx集群之SSL证书的WebApi微服务

    l  HTTP与HTTPS(SSL协议)

    l  Openssl生成SSL证书

    l  编写.NET WebApi

    l  部署WebApi到局域网内3台PC机

    l  Nginx集群配置搭建

    l  运行结果

    l  总结

    2       Nginx集群之SSL证书的WebApi微服务

    Nginx集群是.NET WebApi提供了负载均衡的其中一种实现方式,同时还增加了SSL认证,能够确保WebApi能够以加密形式进行响应。Nginx使用其中的SSL模块,能够支持HTTPS的配置,当然也能够让HTTP与HTTPS并存(只需要增加listen 80监听端口则可),本文主要实现HTTP访问则跳转至以HTTPS方式。

    以下是本文讲述的主要结构图:

    客户端访问Nginx的域名zhyongfeng.com,然后Nginx进行负载均衡,返回https的响应。Nginx集群之SSL证书的WepApi微服务架构,如下图所示:

     

    3       HTTP与HTTPS(SSL协议)

    HTTP(HyperText Transfer Protocol)超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

    HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议:它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息,它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

    HTTPS和HTTP的区别:

    l  https协议需要到ca申请证书,一般免费证书很少,需要交费。

    l  http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

    l  http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。

    l  http的连接很简单,是无状态的。

    l  HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。

    4       Openssl生成SSL证书

    OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

    本文安装了Visualbox虚拟机,内装了Linux Ubuntu系统,所以使用内置的openssl,具体生成SSL证书命令行如下:

    (Windows下可以到https://www.openssl.org/source/下载,使用ActivePerl安装Openssl):

    自行颁发不受浏览器信任的SSL证书,先生成一个RSA密钥

    zhyongfeng@zhyongfeng-VirtualBox:~$ openssl genrsa -des3 -out server.key 1024

    拷贝一个不需要输入密码的密钥文件

    zhyongfeng@zhyongfeng-VirtualBox:~$ openssl rsa -in server.key -out server_nopass.key

    生成一个证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。

    zhyongfeng@zhyongfeng-VirtualBox:~$ openssl req -new -key server.key -out server.csr

    自己签发证书

    zhyongfeng@zhyongfeng-VirtualBox:~$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out

    如下图所示:

    5       编写.NET WebApi

    UserController.cs

    using System.Net;
    using System.Web.Http;
    
    namespace SSLWebApi.Controllers
    {
        [RoutePrefix("api/User")]
        public class UserController : ApiController
        {
            /// <summary>
            /// 获取当前用户信息
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
            [HttpPost]
            [Route("PostMessage")]
            public string PostMessage([FromBody]string msg)
            {
                return string.Format("当前输入的消息是:{0}", msg);
            }
    
            [Route("GetMachine")]
            public string GetMachine()
            {
                string AddressIP = string.Empty;
                foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
                {
                    if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                    {
                        AddressIP = _IPAddress.ToString();
                    }
                }
                return string.Format("当前系统的IP是:{0}", AddressIP);
            }
        }
    }

    安装Microsoft.AspNet.WebApi.HelpPage

    注册HelpPage页面:

    Global.asax

    using System.Web.Http;
    using System.Web.Mvc;
    
    namespace SSLWebApi
    {
        public class WebApiApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                //注册HelpPage页面
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
            }
        }
    }

     编译后如下:

     

    6       部署WebApi到局域网内3台PC机

    将WebApi部署到以下10.92.202.56的3台PC机

     

    7       Nginx集群配置搭建

    通过自主义域名zhyongfeng.com:80端口进行负载均衡集群访问,则访问C:WindowsSystem32driversetchosts,添加下列“本机IP 自定义的域名”:

    10.93.85.66     zhyongfeng.com

    Nginx的localhost配置如下:

    worker_processes  1; 
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        # HTTPS server
        server {
            listen       443 ssl;
            server_name  localhost;
            ssl_certificate      server.crt;
            ssl_certificate_key  server_nopass.key;
            location / {
                root   html;
                index  index.html index.htm;
            }
        }
    }

    Nginx的集群配置:

    #user  nobody;
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        #server {
        #    listen       80;
        #    server_name  localhost;
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #    error_page   500 502 503 504  /50x.html;
        #    location = /50x.html {
        #        root   html;
        #    }
        #}
    
        upstream zhyongfeng.com {
            server    10.92.202.56:560;
            server    10.92.202.57:570; 
            server    10.92.202.58:580;
        }
        server {
            listen       80;
            server_name  zhyongfeng.com;
            rewrite ^(.*)$  https://$host$1 permanent;
        }
        # HTTPS server
        #
        server {
            listen       443 ssl;
            server_name  zhyongfeng.com;
            ssl_certificate      server.crt;
            ssl_certificate_key  server_nopass.key;
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
            location / {
                proxy_pass   http://zhyongfeng.com;
            }
        }
    }

    运行CMD:

    D:DTLDownLoads
    ginx-1.10.2>start nginx
    
    D:DTLDownLoads
    ginx-1.10.2>nginx -s reload 

    8       运行结果

    Nginx的localhost配置运行结果:

    Nginx的集群配置运行结果:

     

    9       总结

    Nginx使用SSL模块可以支持WebApi的https访问,增加了访问的安全性。SSL模块,具体可以参考Nginx中文文档http://www.nginx.cn/doc/的SSL*模块。WebApi基于SSL协议数据传输的加密, 保证了通信的安全性。SSL的功能包含了建立服务器与客户之间安全的数据通道、服务器对客户的身份认证(如公钥、私钥)等。

    源代码下载:

    http://download.csdn.net/download/ruby_matlab/10138057

    PDF下载:

    Nginx集群之SSL证书的WebApi微服务.pdf

  • 相关阅读:
    关于BlockingQueue
    关于java的线程
    mongodb的锁和高并发
    innodb的锁和高并发
    mysql的事务隔离级别及其使用场景
    mongodb分页
    ReentrantLock和Synchronized
    spring boot MVC
    svn 入门
    多线程的返回值等问题
  • 原文地址:https://www.cnblogs.com/yongfeng/p/7921905.html
Copyright © 2020-2023  润新知