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:\Windows\System32\drivers\etc\hosts,添加下列“本機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\nginx-1.10.2>start nginx

D:\DTLDownLoads\nginx-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM