windows下搭建nginx服務器及實現nginx支持https配置流程


最近剛接觸到了tomcat結合nginx做網站的負載均衡。之前對tomcat搭配nginx實現負載均衡也寫過,在上一篇的博客中,最近遇到的問題是要在http的基礎上支持https。也就是支持加密的請求。在網上也查了很多的資料,下面這篇個人覺着說的換很不錯,記錄一下。講解了如何生成https證書,如何在自己的nginx服務器上配置支持https。

首先要說明為什么要實現https?

  HTTP全名超文本傳輸協議,客戶端據此獲取服務器上的超文本內容。超文本內容則以HTML為主,客戶端拿到HTML內容后可根據規范進行解析呈現。因此,HTTP主要負責的是“內容的請求和獲取”。問題就出在這部分。行監控、劫持、阻擋等行為很容易導致網站泄密,一些關鍵參數比如登錄密碼開發者會在客戶端進行MD5加密,不過互聯網所承載的機密信息遠不只是密碼,搜索內容同樣屬於敏感信息。現如今,百度、谷歌、Github等網站已經全站啟用https,https就像是給網站上了一個“鎖”,HTTPS做的就是給請求加密,讓其對用戶更加安全。對於自身而言除了保障用戶利益外,還可避免本屬於自己的流量被挾持,以保護自身利益。所以在我看來,終有一天HTTPS會實現全網普及。

       這個介紹言簡意賅,我們知道了平常我們在訪問一些銀行或者支付的網站以及12306的時候發現里面都使用了https,上面講解了之后大家應該對https是什么,干什么的有個了解了。下面進入正題,先說說這個證書是怎么生成的。

步驟:

1. 安裝Openssl

  下載地址:http://slproweb.com/products/Win32OpenSSL.html (根據系統選擇32位或者64位版本下載安裝)。

  下載完成后,進行安裝,我安裝在了 C:\wnmp\OpenSSL-Win64文件夾中。

2. 安裝ActivePerl (此軟件目的為了解析pl文件,部分系統不安裝也可以實現本教程的功能,安裝該軟件目的為了學習perl)。

  下載地址:http://www.activestate.com/activeperl/downloads/  (根據系統選擇win32或者win64版本下載安裝)。

3. 配置環境變量

  在環境變量中添加環境變量

    變量名: OPENSSL_HOME            變量值:C:\wnmp\OpenSSL-Win64\bin;        (變量值為openssl安裝位置)

    在path變量結尾添加如下 : %OPENSSL_HOME%;

4. 生成證書   

  (1) 首先在 nginx安裝目錄中創建ssl文件夾用於存放證書。比如我的文件目錄為 C:\wnmp\nginx\ssl

     以管理員身份進入命令行模式,進入ssl文件夾。 命令為: cd  c:/wnmp/nginx/ssl

  (2) 創建私鑰

     在命令行中執行命令: openssl genrsa -des3 -out lee.key 1024     (lee文件名可以自定義),如下圖所示:

      

      輸入密碼后,再次重復輸入確認密碼。記住此密碼,后面會用到。

  (3)創建csr證書

     在命令行中執行命令:  openssl req -new -key lee.key -out lee.csr    (key文件為剛才生成的文件,lee為自定義文件名)

      

       如上圖所示,執行上述命令后,需要輸入信息。輸入的信息中最重要的為 Common Name,這里輸入的域名即為我們要使用https訪問的域名。

       以上步驟完成后,ssl文件夾內出現兩個文件:

ps : 如果你覺着上面這樣一步步的太費勁,可以直接使用一個命令來實現,主要是要將你的網站信息進行一個說明,然后生成一個csr的文件,然后將這個包含有你網站信息的csr文件交給認證機構,認證機構會根據你的csr中的信息生成一個crt的證書文件。下面是一個命令來執行上面的分步的操作。

在openssl的認證中,

普通的 SSL 證書認證分兩種形式,一種是 DV(Domain Validated),還有一種是 OV (Organization Validated),前者只需要驗證域名,后者需要驗證你的組織或公司,在安全性方面,肯定是后者要好。

無論你用 DV 還是 OV 生成私鑰,都需要填寫一些基本信息,這里我們假設如下:

域名,也稱為 Common Name,因為特殊的證書不一定是域名:example.com

組織或公司名字(Organization):Example, Inc.

部門(Department):可以不填寫,這里我們寫Web Security

城市(City):Beijing

省份(State / Province):Beijing

國家(Country):CN

加密強度:2048 位,如果你的機器性能強勁,也可以選擇 4096 位

按照以上信息,使用 OpenSSL 生成 key 和 csr 的命令如下

openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc./OU=Web Security/CN=example.com"

PS:如果是泛域名證書,則應該填寫*.example.com

你可以在系統的任何地方運行這個命令,會自動在當前目錄生成example_com.csr和example_com.key這兩個文件。我們看一下這個文件中的內容,其實就是使用rsa對你的網站信息進行加密后的一段加密字符串:

-----BEGIN CERTIFICATE REQUEST-----
MIICujCCAaICAQAwdTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaWppbmcxEDAO  
BgNVBAcTB0JlaWppbmcxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEVMBMGA1UECxMM  
V2ViIFNlY3VyaXR5MRQwEgYDVQQDEwtleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcN  
AQEBBQADggEPADCCAQoCggEBAPME+nvVCdGN9VWn+vp7JkMoOdpOurYMPvclIbsI  
iD7mGN982Ocl22O9wCV/4tL6DpTcXfNX+eWd7CNEKT4i+JYGqllqP3/CojhkemiY  
SF3jwncvP6VoST/HsZeMyNB71XwYnxFCGqSyE3QjxmQ9ae38H2LIpCllfd1l7iVp  
AX4i2+HvGTHFzb0XnmMLzq4HyVuEIMoYwiZX8hq+kwEAhKpBdfawkOcIRkbOlFew  
SEjLyHY+nruXutmQx1d7lzZCxut5Sm5At9al0bf5FOaaJylTEwNEpFkP3L29GtoU  
qg1t9Q8WufIfK9vXqQqwg8J1muK7kksnbYcoPnNgPx36kZsCAwEAAaAAMA0GCSqG  
SIb3DQEBBQUAA4IBAQCHgIuhpcgrsNwDuW6731/DeVwq2x3ZRqRBuj9/M8oONQen  
1QIacBifEMr+Ma+C+wIpt3bHvtXEF8cCAJAR9sQ4Svy7M0w25DwrwaWIjxcf/J8U  
audL/029CkAuewFCdBILTRAAeDqxsAsUyiBIGTIT+uqi+EpGG4OlyKK/MF13FxDj  
/oKyrSJDtp1Xr9R7iqGCs/Zl5qWmDaLN7/qxBK6vX2R/HLhOK0aKi1ZQ4cZeP7Mr
8EzjDIAko87Nb/aIsFyKrt6Ze3jOF0/vnnpw7pMvhq+folWdTVXddjd9Dpr2x1nc  
y5hnop4k6kVRXDjQ4OTduQq4P+SzU4hb41GIQEz4  
-----END CERTIFICATE REQUEST-----

這個 CSR 文件就是你需要提交給 SSL 認證機構的,當你的域名或組織通過驗證后,認證機構就會頒發給你一個example_com.crt

而example_com.key是需要用在 Nginx 配置里和example_com.crt配合使用的,需要好好保管,千萬別泄露給任何第三方。

哈哈哈  如果我們就是自己簡單的學習,想必我們是不會提交給認證機構的,別着急,不提交給認證機構我們也能自己生成證書,只是這個證書在我們使用的時候回提示不是瀏覽器可以接受的,也就是不安全的,但是我們自己學習用沒有關系。

這里說一點哈,如果你在設置證書的時候設置了密碼,這里是如何去除密碼。

     在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令,否則會在啟動nginx的時候需要輸入密碼。

     復制lee.key並重命名為lee.key.org 

     可以使用此命令行,也可以使用鼠標操作     copy example.key example.key.org

     去除口令,在命令行中執行此命令:  openssl rsa -in example.key.org -out example.key  (lee為自定義文件名)

     如下圖所示,此命令需要輸入剛才設置的密碼。

      

   (5)生成crt證書

     在命令行中執行此命令: openssl x509 -req -days 365 -in example.csr -signkey example.key -out example.crt  (lee為自定義文件名)

      

      證書生成完畢,ssl文件夾中一共生成如下4個文件,我們需要使用到的是example.crt和example.key。

      

上面是我們生成我們的證書的一個過程,下面看看如何在nginx中配置來支持https。

 

修改nginx.conf文件

    nginx.conf文件位於:C:\wnmp\nginx\conf

    找到該文件中如下代碼的位置進行修改: 保證本機的端口不被占用 443 和 80

復制代碼
復制代碼
# HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

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

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

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
復制代碼
復制代碼

     修改為:

復制代碼
復制代碼
# HTTPS server
    #
#modify by lee 20160907 for https -s 
    server {
        listen       443 ssl;
        server_name    www.example.com;
    
        ssl_certificate      C:/wnmp/nginx/ssl/example.crt;
        ssl_certificate_key  C:/wnmp/nginx/ssl/example.key;
    
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
    
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
    
        location / {
            root   C:/wnmp/example;
            index  index.html index.htm index.php;
        }

               root           C:/wnmp/example;
               fastcgi_pass   127.0.0.1:9001;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
        }
    }
#modify by lee 20160907 for https -s 
復制代碼
復制代碼

     重啟nginx。

     在瀏覽器中,訪問 https://www.example.com。發現出現證書認證,並能夠成功訪問。(www.example.com為生成證書時,Common Name輸入的域名)

上面這是一個生成證書和如何結合nginx使用的簡單說明,但是我們相信在這個過程中肯定會遇到很多很多的坑,遇到一個填一個吧,把所有的坑填了我認為你對https和nginx的理解就上了一個檔次了。


免責聲明!

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



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