服務器(6)--Nginx實現HTTPS網站設置


一、HTTPS


    全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司(Netscape)進行,並內置於其瀏覽器Netscape Navigator中,提供了身份驗證與加密通訊方法。現在它被廣泛用於萬維網上安全敏感的通訊,例如交易支付方面。


二、開啓nginx的ssl模塊


1、nginx沒有安裝

編譯安裝nginx時帶上 --with-http_ssl_module配置就可以了。
./configure --with-http_ssl_module

2、nginx已經安裝

查看nginx是否安裝ssl模塊

/usr/local/nginx/sbin/nginx -V


如果沒有ssl模塊,操作以下步驟:

1)進入nginx的源碼包目錄
2)重新配置
在剛纔得到的編譯信息後面加入 --with-http_ssl_module,如下:
./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-http_stub_status_module
--with-http_ssl_module
3)重新編譯 make,不需要make install安裝。否則會覆蓋之前安裝的nginx。
4)需要替換nginx二進制文件,先停止掉nginx進程;備份一下原來的啓動腳本。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old;
cp objs/nginx /usr/local/nginx/sbin/nginx;
5)查看nginx的模塊:/usr/local/nginx/sbin/nginx –V ,看下是否把需要的模塊編譯進去了。
6)最後重新啓動nginx


三、密鑰和證書的生成


1、創建服務器證書密鑰文件 cert.key
openssl genrsa -des3 -out cert.key 2048
這個命令會生成一個2048位的密鑰,同時有一個des3方法加密的密碼,如果不想每次都輸入密碼,可以輸入下面的命令:
openssl genrsa -out cert.key 2048
建議用2048位密鑰,少於此可能會不安全或很快將不安全


2、創建服務器證書的申請文件cert.csr(如果自己測試,可以省略此步驟。可以拿着這個文件去數字證書頒發機構(即CA)申請一個數字證書。CA會給你一個新的文件cert.crt,這個纔是你的數字證書。如果是自己做測試,那麼證書的申請機構和頒發機構都是自己,可以使用3中的命令生成數字證書。)
openssl req -new -key cert.key -out cert.csr
輸出內容爲:

Enter pass phrase for root.key: ← 輸入前面創建的密碼 (如果沒有密碼,則不出現此內容)
Country Name (2 letter code) [AU]:CN ← 國家代號,中國輸入CN 
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音 
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany ← 公司英文名 
Organizational Unit Name (eg, section) []: ← 部門,可以不輸入 
Common Name (eg, YOUR name) []: ← 名字,可以不輸入 
Email Address []:[email protected] ← 電子郵箱,可隨意填
Please enter the following ‘extra’ attributes 
to be sent with your certificate request 
A challenge password []: ← 可以不輸入 
An optional company name []: ← 可以不輸入


3、生成證書文件 cert.pem
openssl req -new -x509 -key cert.key -out cert.pem -days 1095


三、配置nginx.conf文件


server {
    listen                   443 default ssl;
    server_name             localhost;
    ssl                     on;
    ssl_certificate            /usr/local/nginx/conf/cert.pem;
    ssl_certificate_key        /usr/local/nginx/conf/cert.key;
    ssl_session_cache        shared:SSL:1m;
    ssl_session_timeout       5m;
ssl_protocols            SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers              HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   html;
        index  index.html index.htm;
      }
}

https參數介紹:

listen:默認使用443端口,後面的ssl代表使用ssl方式,default可省略。
server_name:
服務器名稱
ssl_certificate:
證書其實是個公鑰,它會被髮送到連接服務器的每個客戶端,ssl_certificate_key私鑰是用來解密的,所以它的權限要得到保護但nginx的主進程能夠讀取。當然私鑰和證書可以放在一個證書文件中,這種方式也只有公鑰證書才發送到client。
ssl_certificate_key:
私鑰
ssl_session_cache:
設置ssl/tls會話緩存的類型和大小。如果設置了這個參數一般是shared,buildin可能會參數內存碎片,默認是none,和off差不多,停用緩存。如shared:SSL:10m表示所有的nginx工作進程共享ssl會話緩存,官網介紹說1M可以存放約4000個sessions。

ssl_session_timeout:客戶端可以重用會話緩存中ssl參數的過期時間,內網系統默認5分鐘太短了,可以設成30m即30分鐘甚至4h。

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:

ssl_ciphers:選擇加密套件,不同的瀏覽器所支持的套件(和順序)可能會不同。這裏指定的是OpenSSL庫能夠識別的寫法,你可以通過 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(後面是你所指定的套件加密算法) 來看所支持算法。
ssl_prefer_server_ciphers:
on,代表協商加密算法時,優先使用我們服務端的加密套件,而不是客戶端瀏覽器的加密套件。


四、效果



點擊繼續前往~~~


五、拓展


https服務器優化:
SSL操作需要消耗CPU資源,所以在多處理器的系統,需要啓動多個工作進程,而且數量需要不少於可用CPU的個數。最消耗CPU資源的SSL操作是SSL握手,有兩種方法可以將每個客戶端的握手操作數量降到最低:第一種是保持客戶端長連接,在一個SSL連接發送多個請求,第二種是在併發的連接或者後續的連接中重用SSL會話參數,這樣可以避免SSL握手的操作。會話緩存用於保存SSL會話,這些緩存在工作進程間共享,可以使用ssl_session_cache指令進行配置。1M緩存可以存放大約4000個會話。默認的緩存超時是5分鐘,可以使用ssl_session_timeout加大它。下面是一個針對4核系統的配置優化的例子,使用10M的共享會話緩存:



六、搭建心得


    There are a thousand Hamlets in a thousand people's eyes. 多查看相關的資料,每個人對於同一事物的見解是不同的,多對比着學習,站在巨人的肩膀上,你會看的更遠。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章