nginx搭建https服務器
HTTPS 簡介HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP 通道,簡單來講就是HTTP 的安全版。
HTTPS 簡介
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP 通道,簡單來講就是HTTP 的安全版。即HTTP 下加入SSL 層,HTTPS 的安全基礎是SSL ,因此加密的詳細內容就需要SSL 。
它是一個URI scheme(抽象標識符體系),句法類同
ssl 證書
證書類型簡介
要設置安全服務器,使用公共鑰創(chuàng)建一對公私鑰對。大多數情況下,發(fā)送證書請求(包括自己的公鑰),你的公司證明材料以及費用到一個證書頒發(fā)機構(CA).CA驗證證書請求及您的身份,然后將證書返回給您的安全服務器。
但是內網實現一個服務器端和客戶端傳輸內容的加密,可以自己給自己頒發(fā)證書,只需要忽略掉瀏覽器不信任的警報即可!
由CA 簽署的證書為您的服務器提供兩個重要的功能:
?
?
? 瀏覽器會自動識別證書并且在不提示用戶的情況下允許創(chuàng)建一個安全連接 當一個CA 生成一個簽署過的證書,它為提供網頁給瀏覽器的組織提供身份擔保。 多數支持ssl 的web 服務器都有一個CA 列表,它們的證書會被自動接受。當一個瀏覽器遇到一個其授權CA 并不在列表中的證書,瀏覽器將詢問用戶是否接受或拒絕連接
生成ssl 證書
Html 代碼
1. openssl genrsa -des3 -out wangzhengyi.key 2048
Html 代碼
1. openssl req -new -key wangzhengyi.key -out wangzhengyi.csr
,創(chuàng)建一個自己簽署的CA 證書
Html 代碼
1. openssl req -new -x509 -days 3650 -key wangzhengyi_nopass.key -out wangzheng
yi.crt
搭建https 虛擬主機
虛擬主機配置文件
Html 代碼
,1. upstream sslfpm {
2. server 127.0.0.1:9000 weight =10 max_fails=3 fail_timeout=20s ;
3. }
4.
5. server {
6. listen 192.168.1.*:443;
7. server_name 192.168.1.*;
8.
9. #為一個server 開啟ssl 支持
10. ssl on;
11. #為虛擬主機指定pem 格式的證書文件
12. ssl_certificate /home/wangzhengyi/ssl/wangzhengyi.crt;
13. #為虛擬主機指定私鑰文件
14. ssl_certificate_key /home/wangzhengyi/ssl/wangzhengyi_nopass.key;
15. #客戶端能夠重復使用存儲在緩存中的會話參數時間
16. ssl_session_timeout 5m;
17. #指定使用的ssl 協議
18. ssl_protocols SSLv3 TLSv1;
19. #指定許可的密碼描述
20. ssl_ciphers ALL:!ADH:!EXPORT56:RC4 RSA: HIGH: MEDIUM: LOW: SSLv2: EXP;
21. #SSLv3和TLSv1協議的服務器密碼需求優(yōu)先級高于客戶端密碼
22. ssl_prefer_server_ciphers on;
23.
24. location / {
25. root /home/wangzhengyi/ssl/;
26. autoindex on;
27. autoindex_exact_size off;
28. autoindex_localtime on;
29. }
30. # redirect server error pages to the static page /50x.html
31. #
32. error_page 500 502 503 504 /50x.html;
33. error_page 404 /404.html;
34.
35. location = /50x.html {
36. root /usr/share/nginx/www;
37. }
38. location = /404.html {
39. root /usr/share/nginx/www;
40. }
41.
42. # proxy the PHP scripts to fpm
43. location ~ .php$ {
,44. access_log /var/log/nginx/ssl/ssl.access.log main;
45. error_log /var/log/nginx/ssl/ssl.error.log;
46. root /home/wangzhengyi/ssl/;
47. fastcgi_param HTTPS on;
48. include /etc/nginx/fastcgi_params;
49. fastcgi_pass sslfpm;
50. }
51. }
HTTPS 服務器優(yōu)化
方法
SSL 操作需要消耗CPU 資源,所以在多處理器的系統(tǒng),需要啟動多個工作進程,而且數量需要不少于可用CPU 的個數。最消耗CPU 資源的SSL 操作是SSL 握手,有兩種方法可以將每個客戶端的握手操作數量降到最低:
1. 保持客戶端長連接,在一個SSL 連接發(fā)送多個請求
2. 在并發(fā)的連接或者后續(xù)的連接中重用SSL 會話參數,這樣可以避免SSL 握手操作。
會話緩存用于保存SSL 會話,這些緩存在工作進程間共享,可以使用ssl_session_cache指令進行配置。1M 緩存可以存放約4000個會話。默認的緩存超時時間是5m ,可以使用ssl_session_timeout加大它。
ssl_session_cache指令 Html 代碼
1. 語法:ssl_session_cache off|none|builtin:size|shared:name:size
2. 使用環(huán)境:main,server
3. 緩存類型:
4. off -- 硬關閉,nginx 明確告訴客戶端這個會話不可重用
5. none -- 軟關閉,nginx 告訴客戶端會話能夠被重用,但是nginx 實際上不會重用它們
6. bultin -- openssl內置緩存,僅可用于一個工作進程. 可能導致內存碎片
7. shared -- 所有工作進程的共享緩存。(1)緩存大小用字節(jié)數指定(2)每個緩存必須擁有自己
的名稱(3)同名的緩存可用于多個虛擬主機
優(yōu)化示例
Html 代碼
,1. #優(yōu)化ssl 服務
2. ssl_session_cache shared:wzy:10m;
3. #客戶端能夠重復使用存儲在緩存中的會話參數時間
4. ssl_session_timeout 10m;