阿里巴巴SSL安全機制利用Nginx支持HTTPS協議原理

Nginx Linux Tomcat OpenSSL 路人宅 2017-05-07

Tengine是一個由阿里巴巴工程師基於Nginx開發的開源Web服務器,適合流量大的互聯網服務,在淘寶、天貓等電商業務大量使用,併成為阿里雲產品SLB、OSS、CDN的核心組件。微博、土豆、小米等大型互聯網公司也是Tengine用戶。

朱照遠是Tengine開源項目發起人,同時也是阿里巴巴集團開源委員會成員,在業內他的花名“叔度”更為知名。他表示,“按照目前的發展趨勢,Tengine可能很快就會超過老牌Web服務器Lighttpd位列第8。”

阿里巴巴SSL安全機制利用Nginx支持HTTPS協議原理

因業務龐大,阿里巴巴經常性地面臨大規模交易、雲計算、大數據等技術領域的極端挑戰。該公司既有大量的自研技術,同時也積極擁抱開源社區,使用並回饋,如Tengine團隊就向Nginx官方貢獻過patch,並幫助Nginx官方將其文檔翻譯成中文。

下面為大家說一說阿里巴巴SSL安全機制利用Nginx支持HTTPS協議是如何實現的。首先介紹一下HTTPS是以安全為目標的HTTP通道,簡單來說就是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。配置HTTPS協議支持,採用Tomcat和Nginx協同進行安裝配置滿足工作需要。

首先準備工作Tomcat此處省略,Nginx安裝時的準備工作如下:

Nginx安裝如下插件:

openssl-1.0.2

pcre-8.21

zlib-1.2.8

openssl安裝時注意一些其他依賴插件如:

libcrypto.a libcrypto.pc libssl.a libssl.pc

準備就緒之後,進行Nginx安裝操作,Linux檢測安裝平臺目標特徵,執行命令:

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

--with-http_realip_module --with-openssl=/usr/local/openssl-1.0.2 --with-zlib=/usr/local/zlib-1.2.8

Linux編譯並安裝命令,具體如下:

編譯命令:make

安裝命令:make install

清除編譯命令:make clean

生成祕鑰文件,Linux下生成祕鑰分別執行命令如下:

阿里巴巴SSL安全機制利用Nginx支持HTTPS協議原理

參考參數說明:

Country Name (2 letter code)[XX]:cn--------國家

State or Province Name (full name)[]:yoodb---------省份

Locality Name (eg, city) [DefaultCity]:yoodb--------------地區名字

Organization Name (eg, company)[Default Company Ltd]:yoodb------公司名

Organizational Unit Name (eg,section) []:ning-----部門

Common Name (eg, your name or yourserver's hostname) []:yoodb----CA主機名

Email Address []:---------郵箱

Please enter the following 'extra'attributes

to be sent with your certificaterequest

A challenge password []:-----------證書請求密鑰,CA讀取證書的時候需要輸入密碼

An optional company name[]:-----------公司名稱,CA讀取證書的時候需要輸入名稱

Nginx配置nginx.conf文件,具體如下:

阿里巴巴SSL安全機制利用Nginx支持HTTPS協議原理

部署以及重啟 Nginx 操作:

開啟 Linux 端口號 443

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

/etc/init.d/iptables status 查看防火牆狀態

vim /etc/sysconfig/iptables 編輯防火牆文件

/etc/init.d/iptables restart 重啟防火牆

nginx –s reload 重啟 Nginx服務器命令

Nginx模塊與工作原理

Nginx由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block(location是Nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啟動不同的模塊去完成相應的工作。

Nginx的模塊從結構上分為核心模塊、基礎模塊和第三方模塊:

1) 核心模塊:HTTP模塊、EVENT模塊和MAIL模塊

2) 基礎模塊:HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊,

3)第三方模塊:HTTP Upstream Request Hash模塊、Notice模塊和HTTP Access Key模塊。

Nginx的模塊從功能上分為如下三類:

1) Handlers(處理器模塊)。此類模塊直接處理請求,並進行輸出內容和修改headers信息等操作。Handlers處理器模塊一般只能有一個。

2) Filters (過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最後由Nginx輸出。

3) Proxies (代理類模塊)。此類模塊是Nginx的HTTP Upstream之類的模塊,這些模塊主要與後端一些服務比如FastCGI等進行交互,實現服務代理和負載均衡等功能。

阿里巴巴SSL安全機制利用Nginx支持HTTPS協議原理

Nginx本身做的工作實際很少,當它接到一個HTTP請求時,它僅僅是通過查找配置文件將此次請求映射到一個location block,而此location中所配置的各個指令則會啟動不同的模塊去完成工作,因此模塊可以看做Nginx真正的勞動工作者。通常一個location中的指令會涉及一個handler模塊和多個filter模塊(當然,多個location可以複用同一個模塊)。handler模塊負責處理請求,完成響應內容的生成,而filter模塊對響應內容進行處理。

Nginx的模塊直接被編譯進Nginx,因此屬於靜態編譯方式。啟動Nginx後,Nginx的模塊被自動加載,不像Apache,首先將模塊編譯為一個so文件,然後在配置文件中指定是否進行加載。在解析配置文件時,Nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。

相關推薦

推薦中...