Nginx開啓SSL支持HTTPS訪問(自簽名方法)

Nginx開啓SSL支持HTTPS訪問(自簽名方法)

超文本傳輸安全協議(縮寫:HTTPS,英語:Hypertext Transfer Protocol Secure)是超文本傳輸協議和SSL/TLS的組合,用以提供加密通信及對網絡服務器身份的鑑定。HTTPS鏈接常常被用於萬維網上的交易支付和企業信息系統中敏感信息的傳輸。HTTPS不該與在RFC 2660中定義的安全超文本傳輸協議(S-HTTP)相混。php

HTTPS 目前已是全部注重隱私和安全的網站的首選,隨着技術的不斷髮展,HTTPS 網站已再也不是大型網站的專利,全部普通的我的站長和博客都可以本身動手搭建一個安全的加密的網站。若是訪問的一個網站沒有加密,那麼你輸入的全部賬號密碼都是明文傳輸,能夠被攔截讀取,所以在涉及到隱私和金融等高保密環境,是必需要使用HTTPS加密的。html

目前對咱們來講證書有兩種方式:nginx

  • 一種是自簽名證書,一種是通過各大瀏覽器系統認證支持的CA證書,若是使用自簽名證書,雖然數據傳輸仍然是加密的,可是在用戶瀏覽器上,會彈出證書錯誤提示所以最好仍是使用第三方認證的SSL 證書。
  • 目前對咱們來講仍是有一些免費證書機構提供這個認證的,好比Let’s Encrypt 的免費證書,雖然要3個月重籤一次,不過是一直免費的,Let's Encrypt是國外一個公共的免費SSL項目,由 Linux 基金會託管,它的來頭不小,由Mozilla、思科、Akamai、IdenTrust和EFF等組織發起,目的就是向網站自動簽發和管理免費證書,以便加速互聯網由HTTP過渡到HTTPS。
  • 固然若是你網站是商業用的要求有穩定的HTTPS安全環境,實際上是能夠買商用的SSL證書的,好比GODADDY的SSL也不貴。
  • 更多Nginx攻略:https://www.bnxb.com/nginx/

自簽名方式

如須要受瀏覽器信任的證書安裝方式,能夠看這裏:Nginx開啓SSL支持HTTPS訪問(使用Let's Encrypt免費證書)瀏覽器

先教你自簽名的方式,雖然這個很雞肋,在有免費證書能夠用的狀況下,基本沒人用了:安全

一、首先機器上要安裝openssl和openssl-devel

#yum install openssl
#yum install openssl-devel

二、本身頒發證書給本身

①進入目錄服務器

#cd /usr/local/nginx/conf

②建立服務器RSA私鑰,命令會讓你輸入一個口令:網絡

#openssl genrsa -des3 -out server.key 1024

③建立簽名請求的證書(CSR):這裏會提示輸入省份(State / Province)、城市(City)、域名信息等,重要的是,email必定要是你的域名後綴的。這樣就有一個 csr 文件了,提交給 ssl 提供商的時候就是這個 csr 文件。固然我這裏並無向證書提供商申請,下一步咱們本身簽發了證書。框架

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

④在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令:性能

#openssl rsa -in server.key -out server_nopwd.key

⑤標記證書使用上述私鑰和CSR:網站

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

到這裏證書已經生成完畢。

三、配置nginx,修改Nginx配置文件,讓其包含新標記的證書和私鑰:

server {
    listen 443;
    ssl on;
    ssl_certificate  /usr/local/nginx/conf/server.crt;
    ssl_certificate_key  /usr/local/nginx/conf/server_nopwd.key;
}

加上括號內的語句,而後重啓nginx。

  • 另外若是出現「[emerg] 10464#0: unknown directive 「ssl」 in /usr/local/nginx-0.6.32/conf/nginx.conf:74」則說明沒有將ssl模塊編譯進nginx,在編譯configure的時候需加上"–with-http_ssl_module"。
  • 另外還能夠加入以下代碼實現80端口301重定向到443,
server {
  listen 80;
  server_name www.bnxb.com;
  rewrite ^(.*) https://$server_name$1 permanent;
}

到這裏就配置完成,能夠用https://www.bnxb.com這種方式訪問你的網站了,可是由於這裏是自簽名證書,瀏覽器沒辦法驗證證書真僞,所以若是要去除瀏覽器訪問的證書錯誤提示,能夠把以前生成的server.crt文件使用winscp之類的SSH下載軟件下載下來,導入到你電腦系統的證書管理器就好了,具體方法:控制面板 -> Internet選項 -> 內容 -> 發行者 -> 受信任的根證書頒發機構 -> 導入 -》選擇server.crt。

  • 注意 https訪問的是443端口,因此iptables要放開這個口,才能夠。

只針對註冊、登錄進行https加密處理

既然HTTPS能保證安全,爲何全世界大部分網站都仍舊在使用HTTP呢?使用HTTPS協議,對服務器來講是很大的負載開銷。從性能上考慮,我 們沒法作到對於每一個用戶的每一個訪問請求都進行安全加密(固然,Google這種大神除外)。做爲一個普通網站,咱們所追求的只是在進行交易、密碼登錄等操 做時的安全。經過配置Nginx服務器,可使用rewrite來作到這一點。

在https server下加入以下配置:

if ($uri !~* "/logging.php$")
{
    rewrite ^/(.*)$ http://$host/$1 redirect;
}

在http server下加入以下配置:

if ($uri ~* "/logging.php$")
{
    rewrite ^/(.*)$ https://$host/$1 redirect;
}

這樣一來,用戶會且只會在訪問logging.php的狀況下,纔會經過https訪問。

  • 更新:
    • 有一些開發框架會根據 $_SERVER['HTTPS'] 這個 PHP 變量是否爲 on 來判斷當前的訪問請求是不是使用 https。爲此咱們須要在 Nginx 配置文件中添加一句來設置這個變量。遇到 https 連接重定向後會自動跳到 http 問題的同窗能夠參考一下。
server {
    ...
    listen 443;
    location \.php$ {
        ...
        include fastcgi_params;
        fastcgi_param HTTPS on; # 多加這一句
    }
}

server {
    ...
    listen 80;
    location \.php$ {
        ...
        include fastcgi_params;
    }
}

完畢。

相關文章
相關標籤/搜索