亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

nginx環境下配置ssl加密(單雙向認證、部分https)

2024-08-30 12:28:20
字體:
來源:轉載
供稿:網友

nginx下配置ssl本來是很簡單的,無論是去認證中心買SSL安全證書還是自簽署證書,但最近公司OA的一個需求,得以有個機會實際折騰一番。一開始采用的是全站加密,所有訪問http:80的請求強制轉換(rewrite)到https,后來自動化測試結果說響應速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他們怎么測的。所以就試了一下部分頁面https(不能只針對某類動態請求才加密)和雙向認證。下面分節介紹。

默認nginx是沒有安裝ssl模塊的,需要編譯安裝nginx時加入--with-http_ssl_module選項。

關于SSL/TLS原理請參考 這里,如果你只是想測試或者自簽發ssl證書,參考 這里 。

提示:nignx到后端服務器由于一般是內網,所以不加密。

1. 全站ssl

全站做ssl是最常見的一個使用場景,默認端口443,而且一般是單向認證。

server {    listen 443;    server_name example.com;    root /apps/www;    index index.html index.htm;    ssl on;    ssl_certificate ../SSL/ittest.pem;    ssl_certificate_key ../SSL/ittest.key;#    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;#    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;#    ssl_prefer_server_ciphers on;}

如果想把http的請求強制轉到https的話:

server { listen   80; server_name example.me; rewrite   ^  https://$server_name$request_uri? permanent;### 使用return的效率會更高 # return 301 https://$server_name$request_uri;}

ssl_certificate證書其實是個公鑰,它會被發送到連接服務器的每個客戶端,ssl_certificate_key私鑰是用來解密的,所以它的權限要得到保護但nginx的主進程能夠讀取。當然私鑰和證書可以放在一個證書文件中,這種方式也只有公鑰證書才發送到client。

ssl_protocols指令用于啟動特定的加密協議,nginx在1.1.13和1.0.12版本后默認是ssl_protocols
 SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1與TLSv1.2要確保OpenSSL >= 1.0.1 ,SSLv3 現在還有很多地方在用但有不少被攻擊的漏洞。

ssl_ciphers選擇加密套件,不同的瀏覽器所支持的套件(和順序)可能會不同。這里指定的是OpenSSL庫能夠識別的寫法,你可以通過 openssl
 -v cipher 'RC4:HIGH:!aNULL:!MD5'
(后面是你所指定的套件加密算法) 來看所支持算法。

ssl_prefer_server_ciphers on設置協商加密算法時,優先使用我們服務端的加密套件,而不是客戶端瀏覽器的加密套件。

https優化參數

  • ssl_session_cache shared:SSL:10m; : 設置ssl/tls會話緩存的類型和大小。如果設置了這個參數一般是sharedbuildin可能會參數內存碎片,默認是none,和off差不多,停用緩存。如shared:SSL:10m表示我所有的nginx工作進程共享ssl會話緩存,官網介紹說1M可以存放約4000個sessions。 詳細參考serverfault上的問答ssl_session_cache。
  • ssl_session_timeout : 客戶端可以重用會話緩存中ssl參數的過期時間,內網系統默認5分鐘太短了,可以設成30m即30分鐘甚至4h。

設置較長的keepalive_timeout也可以減少請求ssl會話協商的開銷,但同時得考慮線程的并發數了。

提示:在生成證書請求csr文件時,如果輸入了密碼,nginx每次啟動時都會提示輸入這個密碼,可以使用私鑰來生成解密后的key來代替,效果是一樣的,達到免密碼重啟的效果:

openssl rsa -in ittest.key -out ittest_unsecure.key

導入證書

如果你是找一個知名的ssl證書頒發機構如VeriSign、Wosign、StartSSL簽發的證書,瀏覽器已經內置并信任了這些根證書,如果你是自建C或獲得二級CA授權,都需要將CA證書添加到瀏覽器,這樣在訪問站點時才不會顯示不安全連接。各個瀏覽的添加方法不在本文探討范圍內。

2. 部分頁面ssl

一個站點并不是所有信息都是非常機密的,如網上商城,一般的商品瀏覽可以不通過https,而用戶登錄以及支付的時候就強制經過https傳輸,這樣用戶訪問速度和安全性都得到兼顧。

但是請注意不要理解錯了,是對頁面加密而不能針對某個請求加密,一個頁面或地址欄的URL一般會發起許多請求的,包括css/png/js等靜態文件和動態的Java或PHP請求,所以要加密的內容包含頁面內的其它資源文件,否則就會出現http與https內容混合的問題。在http頁面混有https內容時,頁面排版不會發生亂排現象;在https頁面中包含以http方式引入的圖片、js等資源時,瀏覽器為了安全起見會阻止加載。

下面是只對example.com/account/login登錄頁面進行加密的栗子:

root /apps/www;index index.html index.htm;server {  listen   80;  server_name example.com;  location ^~ /account/login {    rewrite ^ https://$server_name:443$request_uri? permanent;  }  location / {    proxy_pass http://localhost:8080;    ### Set headers ####    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_redirect   off;   }}server {  listen 443 ssl;  server_name example.com;  ssl on;  ssl_certificate ../SSL/ittest.pem;  ssl_certificate_key ../SSL/ittest.key;  ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;  ssl_prefer_server_ciphers on;  location ^~ /account/login {    proxy_pass http://localhost:8080;    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_redirect   off;    ### Most PHP, Python, Rails, Java App can use this header -> https ###    proxy_set_header X-Forwarded-Proto $scheme;  }  location / {    rewrite ^ http://$server_name$request_uri? permanent;  }}

關于rewrite與location的寫法參考這里。當瀏覽器訪問http://example.com/account/login.xx時,被301到https://example.com/account/login.xx,在這個ssl加密的虛擬主機里也匹配到/account/login,反向代理到后端服務器,后面的傳輸過程是沒有https的。這個login.xx頁面下的其它資源也是經過https請求nginx的,登錄成功后跳轉到首頁時的鏈接使用http,這個可能需要開發代碼里面控制。

  • 上面配置中使用了proxy_set_header X-Forwarded-Proto$scheme,在jsp頁面使用request.getScheme()得到的是https 。如果不把請求的$scheme協議設置在header里,后端jsp頁面會一直認為是http,將導致響應異常。
  • ssl配置塊還有個與不加密的80端口類似的location>/,它的作用是當用戶直接通過https訪問首頁時,自動跳轉到不加密端口,你可以去掉它允許用戶這樣做。

3. 實現雙向ssl認證

上面的兩種配置都是去認證被訪問的站點域名是否真實可信,并對傳輸過程加密,但服務器端并沒有認證客戶端是否可信。(實際上除非特別重要的場景,也沒必要去認證訪問者,除非像銀行U盾這樣的情況)

要實現雙向認證HTTPS,nginx服務器上必須導入CA證書(根證書/中間級證書),因為現在是由服務器端通過CA去驗證客戶端的信息。還有必須在申請服務器證書的同時,用同樣的方法生成客戶證書。取得客戶證書后,還要將它轉換成瀏覽器識別的格式(大部分瀏覽器都認識PKCS12格式):

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

然后把這個client.p12發給你相信的人,讓它導入到瀏覽器中,訪問站點建立連接的時候nginx會要求客戶端把這個證書發給自己驗證,如果沒有這個證書就拒絕訪問。

同時別忘了在 nginx.conf 里配置信任的CA:(如果是二級CA,請把根CA放在后面,形成CA證書鏈)

  proxy_ignore_client_abort on;  ssl on;  ...  ssl_verify_client on;  ssl_verify_depth 2;  ssl_client_certificate ../SSL/ca-chain.pem; #在雙向location下加入:  proxy_set_header X-SSL-Client-Cert $ssl_client_cert;

拓展:使用geo模塊

nginx默認安裝了一個ngx_http_geo_module,這個geo模塊可以根據客戶端IP來創建變量的值,用在如來自172.29.73.0/24段的IP訪問login時使用雙向認證,其它段使用一般的單向認證。

geo $duplexing_user {  default 1;  include geo.conf; # 注意在0.6.7版本以后,include是相對于nginx.conf所在目錄而言的}

語法 geo [$address] $variable { … },位于http段,默認地址是$reoute_addr,假設 conf/geo.conf 內容:

127.0.0.1/32    LOCAL;  # 本地
172.29.73.23/32 SEAN;   # 某個IP
172.29.73.0/24  1;      # IP段,可以按國家或地域定義后面的不同的值
需要配置另外一個虛擬主機server{ssl 445},里面使用上面雙向認證的寫法,然后在80或443里使用變量$duplexing_user去判斷,如果為1就rewrite到445,否則rewrite到443。具體用法可以參考nginx geo使用方法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频va| 日本韩国在线不卡| 日韩中文字幕在线免费观看| 亚洲成人久久电影| 国产亚洲视频中文字幕视频| 中文字幕久热精品在线视频| 2019最新中文字幕| 亚洲人成网站777色婷婷| 亚洲精品国偷自产在线99热| 国产一区二区在线免费| 日韩av不卡电影| 欧美午夜女人视频在线| 国产成人鲁鲁免费视频a| 91av视频在线观看| 国产有码一区二区| 97人人做人人爱| 九九久久精品一区| 992tv成人免费影院| 午夜美女久久久久爽久久| 国产成人jvid在线播放| 国产91热爆ts人妖在线| 日韩精品中文字幕久久臀| 正在播放国产一区| 国产成人精品一区二区| 国产a∨精品一区二区三区不卡| 久久久精品视频在线观看| 亚洲成色777777在线观看影院| 精品动漫一区二区三区| 成人激情视频小说免费下载| 久久精品国产久精国产思思| 国产精品高清免费在线观看| 欧美在线观看一区二区三区| 91网站免费看| 精品亚洲aⅴ在线观看| 欧美一级成年大片在线观看| 亚洲欧美色图片| 91夜夜揉人人捏人人添红杏| 韩国视频理论视频久久| 亚洲国产欧美一区| 日韩在线免费观看视频| 另类天堂视频在线观看| 中文字幕av一区二区| 欧美日韩综合视频| 国产精品成人观看视频国产奇米| 亚洲国产天堂久久综合| 欧美日韩中文在线| 久热99视频在线观看| 欧美一级电影在线| 欧美日韩xxxxx| 国产成人亚洲精品| 欧美猛男性生活免费| 亚洲高清色综合| 欧美精品videosex极品1| 欧美电影在线播放| 欧美高清视频在线观看| 亚洲白拍色综合图区| 国产黑人绿帽在线第一区| 福利一区福利二区微拍刺激| 欧美成年人网站| 亚洲图片欧美日产| 中文字幕亚洲无线码在线一区| 91福利视频在线观看| 亚洲白拍色综合图区| 亚洲欧洲日产国产网站| 亚洲天天在线日亚洲洲精| 国产v综合v亚洲欧美久久| 欧美激情精品久久久久久免费印度| 国产成+人+综合+亚洲欧美丁香花| 亚洲午夜av电影| 国产亚洲欧洲在线| 国产国语刺激对白av不卡| 欧美激情在线狂野欧美精品| 欧美激情一区二区三区成人| 国产精品中文字幕在线| 国产在线观看精品| 欧美专区在线观看| 国产精品影片在线观看| 国产精品男人爽免费视频1| 欧美日韩性生活视频| 欧美精品在线极品| 国产日韩欧美在线播放| 日韩亚洲在线观看| 国产精品久久久久久久7电影| 国产欧美日韩综合精品| 岛国av在线不卡| 91精品国产91久久久久福利| 国产一区二区在线免费| 中文字幕久精品免费视频| 亚洲成av人片在线观看香蕉| 中文字幕亚洲欧美日韩高清| 日韩国产欧美区| 色偷偷偷综合中文字幕;dd| 日韩av在线一区| 久久99视频精品| 91久久夜色精品国产网站| 国产成人精品网站| 隔壁老王国产在线精品| 久久精品91久久久久久再现| 成人亲热视频网站| 亚洲午夜色婷婷在线| 大伊人狠狠躁夜夜躁av一区| 欧美国产日本高清在线| 日韩精品极品视频| 亚洲品质视频自拍网| 国产精品直播网红| 久久97精品久久久久久久不卡| 性欧美在线看片a免费观看| 日韩在线中文字幕| 亚洲**2019国产| 国产精品一区二区久久久久| 欧美视频专区一二在线观看| 久久久久久av| 国产suv精品一区二区三区88区| 亚洲国产高清福利视频| 欧美一区视频在线| 亚洲女在线观看| 亚洲国内精品视频| 91麻豆国产语对白在线观看| 亚洲综合中文字幕在线| 国产精品jizz在线观看麻豆| 日韩欧美在线中文字幕| 日韩一区二区精品视频| 欧美日韩国产激情| 4444欧美成人kkkk| 亚洲天堂第一页| 欧美日韩成人在线观看| 亚洲午夜色婷婷在线| 亚洲欧美精品中文字幕在线| 日韩中文综合网| 日韩欧美国产骚| 97香蕉超级碰碰久久免费的优势| 久久久精品国产亚洲| 久久久久久久久久久久av| 国产精品久久久久久久久久三级| 欧美电影在线观看网站| 国产一区二区三区四区福利| 欧美在线视频导航| 国产中文字幕日韩| 日韩精品中文字幕久久臀| 日韩欧美亚洲国产一区| 国产99久久精品一区二区| 亚洲欧美另类国产| 欧美日韩国产中字| 久久精品99久久久久久久久| 美日韩丰满少妇在线观看| 一区二区三区国产视频| 综合激情国产一区| 欧美极品欧美精品欧美视频| 国产免费久久av| 亚洲欧美一区二区精品久久久| 欧美激情国产日韩精品一区18| 一本色道久久综合狠狠躁篇怎么玩| 久久久久久com| 国产成人自拍视频在线观看| 国产精品亚发布| 国产在线播放不卡| 国产精品偷伦视频免费观看国产| 日韩福利在线播放| 久久久国产一区| 91亚洲国产成人精品性色| 国产精品黄色av| 亚洲精品美女在线观看播放| 91精品国产乱码久久久久久久久| 中文字幕欧美视频在线|