1. 程式人生 > 實用技巧 >中介軟體使用-nginx 中ssl證書的設定

中介軟體使用-nginx 中ssl證書的設定

Nginx SSL證書設定

一、證書獲取

使用 https://ssl.ztimage.com 線上獲取Let's Encrypt提供的免費證書。成功申請到證書後,下載下來的資料夾中Nginx資料夾裡儲存的就是本次設定需要的crt公鑰和key私鑰檔案了,如果是從其它渠道獲取的證書檔案則需要準備這兩個公鑰和私鑰檔案。

二、Nginx SSL模組支援

通過命令檢視nginx 編譯時是否已經配置了SSL模組,命令:# nginx -V

如果出現“OpendSSL”字樣則說明已經編譯進了SSL模組,直接進入第三步。

如果未包含SSL模組可按以下步驟編譯原始碼

1.下載原始碼

2.配置

#./configure --prefix=/usr/local
--prefix=/usr/local/nginx
--with-http_ssl_module
--with-file-aio
--with-http_realip_module
--with-http_stub_status_module

3.編譯和安裝

注意:如果你的nginx正在提供服務千萬不要使用 make install,否則會覆蓋安裝

# make

//停止服務並備份
# nginx stop
# cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

//使用新編譯的程式
# cp /objs/nginx /usr/local/nginx/sbin/
# nginx -V
# nginx

三、配置檔案修改

開啟nginx的站點配置檔案,在需要配置ssl證書的站點中新增以下配置資訊:

listen 443 ssl;

ssl_certificate      /usr/certs/cert.crt;
ssl_certificate_key  /usr/certs/private.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;

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

現在站點配置看起來像這樣:

其中ssl_certificate設定的是公鑰檔案路徑,ssl_certificate_key設定的是私鑰檔案路徑

儲存修改,測試一下我們的配置是否有問題

# nginx -t

如果測試沒有問題,我們重新載入配置,讓其生效

# nginx -s reload

生效後通過https的方式在瀏覽器訪問域名就可以看到我們的站點啟用SSL加密。

四、訪問http,自動跳轉到https

方法一:使用url rewrite,將http的訪問重定向至https

server {
  listen 80;
  server_name www.域名.com;
  rewrite ^(.*) https://$server_name$1 permanent;
}
server {
  listen 443;
  server_name www.域名.com;
  root /home/www;
  ssl on;
  ssl_certificate      /usr/certs/cert.crt;
  ssl_certificate_key  /usr/certs/private.key;
}

方法二:使用HSTS(HTTP Strict Transport Security)

使用方法一主要有兩個缺點:

1.不安全,rewrite使用的是302跳轉來實現的,302跳轉會暴露使用者訪問的站點路徑和query string,易被劫持。

2.多增加一次訪問,訪問會顯得更慢一點。

基於以上缺點HSTS誕生了,HTSP 就是新增 header 頭(add_header Strict-Transport-Security max-age=15768000;includeSubDomains),告訴瀏覽器網站使用 HTTPS 訪問,支援HSTS的瀏覽器就會在後面的請求中直接切換到 HTTPS。在 Chrome 中會看到瀏覽器自己會有個 307 Internal Redirect 的內部重定向。在一段時間內也就是max-age定義的時間,不管使用者輸入 www.liberalman.cn 還是http://www.liberalman.cn,都會預設將請求內部跳轉到https://www.liberalman.cn

採用HSTS協議的網站將保證瀏覽器始終連線到該網站的HTTPS加密版本,不需要使用者手動在URL位址列中輸入加密地址。

該協議將幫助網站採用全域性加密,使用者看到的就是該網站的安全版本。

在nginx中配置HSTS,僅需要在https的server站點新增如下頭部:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

這樣當第一次以https方式訪問我的網站,nginx則會告知客戶端的瀏覽器,以後即便位址列輸入http,也要瀏覽器改成https來訪問我的nginx伺服器。