国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Nginx搭建HTTPS服務器和強制使用HTTPS訪問的方法

2019-11-25 17:05:29
字體:
來源:轉載
供稿:網友

HTTPS簡介
HTTPS(Hyper Text Transfer Protocol Secure),是一種基于SSL/TLS的HTTP,所有的HTTP數據都是在SSL/TLS協議封裝之上進行傳輸的。HTTPS協議是在HTTP協議的基礎上,添加了SSL/TLS握手以及數據加密傳輸,也屬于應用層協議。Https使用的默認端口是443。更多HTTPS原理可以參考阮一峰老師的文章:http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

SSL證書
證書類型簡介
要設置安全服務器,使用公共鑰創建一對公私鑰對。大多數情況下,發送證書請求(包括自己的公鑰),你的公司證明材料以及費用到一個證書頒發機構(CA)。CA驗證證書請求及您的身份,然后將證書返回給您的安全服務器。
但是內網實現一個服務器端和客戶端傳輸內容的加密,可以自己給自己頒發證書,只需要忽略掉瀏覽器不信任的警報即可!
由CA簽署的證書為您的服務器提供兩個重要的功能:

  1.     瀏覽器會自動識別證書并且在不提示用戶的情況下允許創建一個安全連接。
  2.     當一個CA生成一個簽署過的證書,它為提供網頁給瀏覽器的組織提供身份擔保。

    多數支持ssl的web服務器都有一個CA列表,它們的證書會被自動接受。當一個瀏覽器遇到一個其授權CA并不在列表中的證書,瀏覽器將詢問用戶是否接受或拒絕連接。

制作CA證書
ca.key CA私鑰:

    openssl genrsa -des3 -out ca.key 2048  

2015816174647523.jpg (768×167)

    ca.crt CA根證書(公鑰):

openssl req -new -x509 -days 365 -key ca.key -out ca.crt

2015816174708350.jpg (901×376)

制作網站的證書并用CA簽名認證
這里,假設網站域名為www.example.com,生成com.example.com證書私鑰:

 

  openssl genrsa -des3 -out www.example.com.pem 1024 

2015816174727737.jpg (826×165)

    制作解密后的www.example.com證書私鑰:

  openssl rsa -in www.example.com.pem -out www.example.com.key 

2015816174745612.jpg (937×71)

    生成簽名請求:

  openssl req -new -key www.example.com.pem -out www.example.com.csr 

   

2015816174821668.jpg (1005×491)

    可以在Common Name中填入網站域名,即可生產該網站的證書。
用CA進行簽名:

   
復制代碼 代碼如下:
openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in www.example.com.csr -out www.example.com.crt 
可能執行簽名時,會出現“I am unable to access the ./demoCA/newcerts directory”問題:

2015816174842731.jpg (566×98)

解決方法:

  mkdir -p demoCA/newcerts   touch demoCA/index.txt   touch demoCA/serial   echo "01" > demoCA/serial 

然后,再執行簽名命令即可。

基于Nginx搭建HTTPS虛擬主機
虛擬主機配置文件

  upstream sslfpm {     server 127.0.0.1:9000  weight=10  max_fails=3 fail_timeout=20s;   }      server {      listen    192.168.1.*:443;      server_name 192.168.1.*;           #為一個server開啟ssl支持     ssl         on;     #為虛擬主機指定pem格式的證書文件     ssl_certificate   /home/wangzhengyi/ssl/wangzhengyi.crt;      #為虛擬主機指定私鑰文件     ssl_certificate_key /home/wangzhengyi/ssl/wangzhengyi_nopass.key;      #客戶端能夠重復使用存儲在緩存中的會話參數時間     ssl_session_timeout 5m;     #指定使用的ssl協議      ssl_protocols SSLv3 TLSv1;      #指定許可的密碼描述     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;      #SSLv3和TLSv1協議的服務器密碼需求優先級高于客戶端密碼     ssl_prefer_server_ciphers  on;         location / {        root  /home/wangzhengyi/ssl/;       autoindex on;         autoindex_exact_size  off;         autoindex_localtime on;     }        # redirect server error pages to the static page /50x.html       #       error_page  500 502 503 504 /50x.html;       error_page  404 /404.html;        location = /50x.html {         root  /usr/share/nginx/www;       }     location = /404.html {         root  /usr/share/nginx/www;       }            # proxy the PHP scripts to fpm       location ~ /.php$ {       access_log /var/log/nginx/ssl/ssl.access.log main;       error_log /var/log/nginx/ssl/ssl.error.log;       root /home/wangzhengyi/ssl/;        fastcgi_param  HTTPS  on;         include /etc/nginx/fastcgi_params;          fastcgi_pass  sslfpm;       }   } 

HTTPS服務器優化
方法
SSL操作需要消耗CPU資源,所以在多處理器的系統,需要啟動多個工作進程,而且數量需要不少于可用CPU的個數。最消耗CPU資源的SSL操作是SSL握手,有兩種方法可以將每個客戶端的握手操作數量降到最低:

    保持客戶端長連接,在一個SSL連接發送多個請求
    在并發的連接或者后續的連接中重用SSL會話參數,這樣可以避免SSL握手操作。

會話緩存用于保存SSL會話,這些緩存在工作進程間共享,可以使用ssl_session_cache指令進行配置。1M緩存可以存放約4000個會話。默認的緩存超時時間是5m,可以使用ssl_session_timeout加大它。
ssl_session_cache指令

    語法:ssl_session_cache off|none|builtin:size|shared:name:size 
    使用環境:main,server 
    緩存類型: 
    off -- 硬關閉,nginx明確告訴客戶端這個會話不可重用 
    none -- 軟關閉,nginx告訴客戶端會話能夠被重用,但是nginx實際上不會重用它們 
    bultin -- openssl內置緩存,僅可用于一個工作進程.可能導致內存碎片 
    shared -- 所有工作進程的共享緩存。(1)緩存大小用字節數指定(2)每個緩存必須擁有自己的名稱(3)同名的緩存可用于多個虛擬主機 

優化示例

  #優化ssl服務   ssl_session_cache  shared:wzy:10m;    #客戶端能夠重復使用存儲在緩存中的會話參數時間   ssl_session_timeout 10m; 

nginx強制使用https訪問(http跳轉到https)


基于nginx搭建了一個https訪問的虛擬主機,監聽的域名是test.com,但是很多用戶不清楚https和http的區別,會很容易敲成http://test.com,這時會報出404錯誤,所以我需要做基于test.com域名的http向https的強制跳轉

nginx的rewrite方法


思路
這應該是大家最容易想到的方法,將所有的http請求通過rewrite重寫到https上即可

配置

  server {     listen 192.168.1.111:80;     server_name test.com;          rewrite ^(.*)$ https://$host$1 permanent;   } 


搭建此虛擬主機完成后,就可以將http://test.com的請求全部重寫到https://test.com上了


nginx的497狀態碼

error code 497  497 - normal request was sent to HTTPS 


解釋:當此虛擬站點只允許https訪問時,當用http訪問時nginx會報出497錯誤碼

思路
利用error_page命令將497狀態碼的鏈接重定向到https://test.com這個域名上

配置

  server {     listen    192.168.1.11:443; #ssl端口     listen    192.168.1.11:80;  #用戶習慣用http訪問,加上80,后面通過497狀態碼讓它自動跳到443端口     server_name test.com;     #為一個server{......}開啟ssl支持     ssl         on;     #指定PEM格式的證書文件      ssl_certificate   /etc/nginx/test.pem;      #指定PEM格式的私鑰文件     ssl_certificate_key /etc/nginx/test.key;          #讓http請求重定向到https請求      error_page 497 https://$host$uri?$args;   } 

index.html刷新網頁


思路
上述兩種方法均會耗費服務器的資源,我們用curl訪問baidu.com試一下,看百度的公司是如何實現baidu.com向www.baidu.com的跳轉

2015816174906881.png (1024×410)

可以看到百度很巧妙的利用meta的刷新作用,將baidu.com跳轉到www.baidu.com.因此我們可以基于http://test.com的虛擬主機路徑下也寫一個index.html,內容就是http向https的跳轉

index.html  <html>   <meta http-equiv="refresh" content="0;url=https://test.com/">   </html> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 侯马市| 集安市| 晋宁县| 冕宁县| 镇江市| 舟曲县| 丹寨县| 中宁县| 凌源市| 浙江省| 富阳市| 太谷县| 阿拉善右旗| 叶城县| 成武县| 曲沃县| 旺苍县| 三门县| 沈阳市| 鲜城| 建始县| 拉孜县| 丹巴县| 莆田市| 巴青县| 三原县| 星座| 武强县| 榆社县| 泽普县| 商洛市| 拉萨市| 六枝特区| 吉林市| 扎赉特旗| 萝北县| 澄迈县| 通道| 漾濞| 林甸县| 深州市|