HTTPS簡單介紹
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單來說就是HTTP的安全版。即HTTP下增長SSL層,HTTPS的安全基礎是SSL。所以加密的具體內容就需要SSL。
它是一個URI scheme(抽象標識符體系),句法類同http:體系,用於安全的http傳輸數據。https使用的默認port是443.
ssl證書
證書類型簡單介紹
要設置安全server,使用公共鑰建立一對公私鑰對。大多數狀況下。發送證書請求(包含本身的公鑰),你的公司證實材料以及費用到一個證書頒發機構(CA).CA驗證證書請求及您的身份。而後將證書返回給您的安全server。
但是內網實現一個server端和client傳輸內容的加密,可以本身給本身頒發證書。僅僅需要忽略掉瀏覽器不信任的警報就能夠!
由CA簽署的證書爲您的server提供兩個重要的功能:
- 瀏覽器會本身主動識別證書並且在不提示用戶的狀況下贊成建立一個安全鏈接
- 當一個CA生成一個簽署過的證書,它爲提供網頁給瀏覽器的組織提供身份擔保。
- 多數支持ssl的webserver都有一個CA列表,它們的證書會被本身主動接受。當一個瀏覽器遇到一個其受權CA並不在列表中的證書,瀏覽器將詢問用戶是否接受或拒絕鏈接
生成ssl證書
- openssl genrsa -des3 -out wangzhengyi.key 2048
- openssl req -new -key wangzhengyi.key -out wangzhengyi.csr
建立一個本身簽署的CA證書
- openssl req -new -x509 -days 3650 -key wangzhengyi_nopass.key -out wangzhengyi.crt
搭建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;
- #client能夠反覆使用存儲在緩存中的會話參數時間
- ssl_session_timeout 5m;
- #指定使用的ssl協議
- ssl_protocols SSLv3 TLSv1;
- #指定許可的password描寫敘述
- ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
- #SSLv3和TLSv1協議的服務器password需求優先級高於clientpassword
- 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;
- }
- }
HTTPSserver優化
方法
SSL操做需要消耗CPU資源。因此在多處理器的系統,需要啓動多個工做進程,而且數量需要很多於可用CPU的個數。最消耗CPU資源的SSL操做是SSL握手。有兩種方法可以將每個client的握手操做數量降到最低:
- 保持client長鏈接。在一個SSL鏈接發送多個請求
- 在併發的鏈接或者興許的鏈接中重用SSL會話參數,這樣可以避免SSL握手操做。
會話緩存用於保存SSL會話,這些緩存在工做進程間共享,可以使用
ssl_session_cache指令進行配置。
1M緩存可以存放約4000個會話。默認的緩存超時時間是5m。可以使用ssl_session_timeout加大它。php
ssl_session_cache指令
- 語法:ssl_session_cache off|none|builtin:size|shared:name:size
- 使用環境:main,server
- 緩存類型:
- off -- 硬關閉,nginx明白告訴client這個會話不可重用
- none -- 軟關閉,nginx告訴client會話能夠被重用,但是nginx實際上不會重用它們
- bultin -- openssl內置緩存,僅可用於一個工做進程.可能致使內存碎片
- shared -- 所有工做進程的共享緩存。(1)緩存大小用字節數指定(2)每個緩存必須擁有本身的名稱(3)同名的緩存可用於多個虛擬主機
優化演示樣例
- #優化ssl服務
- ssl_session_cache shared:wzy:10m;
- #client能夠反覆使用存儲在緩存中的會話參數時間
- ssl_session_timeout 10m;
參考連接
http://nginx.org/cn/docs/http/configuring_https_servers.html