首頁  >  文章  >  運維  >  Nginx反向代理中基於SNI的SSL解決方案

Nginx反向代理中基於SNI的SSL解決方案

王林
王林原創
2023-06-10 21:57:152349瀏覽

Nginx反向代理中基於SNI的SSL解決方案

隨著網路技術的發展,Web應用的安全性問題越來越受到重視。 SSL憑證作為一種提供資料傳輸安全的加密技術,成為了保護Web應用的重要手段之一。而在一些特殊的情況下,需要在同一台伺服器上部署多個SSL證書,這時候基於SNI的SSL解決方案便應運而生。

一、SNI(Server Name Indication)是什麼

SNI是一種TLS擴充協議,可以讓客戶端在​​建立SSL連線時,在「Client Hello」訊息中包含擴充字段,告訴伺服器客戶端想要連接的主機名稱。在單一IP位址和連接埠上,可以實現多網域同時使用不同的SSL憑證。

然而,SNI並不會被所有的瀏覽器和伺服器支援。在使用SNI時,必須確保客戶端和伺服器支援同一個SSL協定版本,且客戶端必須支援SNI擴充。目前常用的瀏覽器,例如Chrome、Firefox、IE7以上版本、Opera等皆支援SNI。

二、Nginx反向代理和SSL

Nginx是一種高效能的Web伺服器,並且支援反向代理。反向代理是一種資訊安全技術,將請求傳送到不同的伺服器上,並將回應傳回給請求者。反向代理伺服器還可以實現負載平衡和SSL加密。

反向代理伺服器作為中間層,與前端Web伺服器和後端通訊。 Nginx支援http和https兩種服務模式。使用https服務時,就需要進行SSL加密和解密。

Nginx的SSL支援有兩種模式:單一SSL憑證模式和基於SNI的多憑證模式。在單一SSL證書模式下,只能使用一個SSL證書,即不能針對不同的網域使用不同的SSL證書。而在基於SNI的多憑證模式下,可以實現多網域SSL加密傳輸。

三、基於SNI的SSL解決方案

  1. 產生SSL證書

首先需要申請SSL證書,並產生對應的證書鍊和私鑰。這裡假設我們要使用兩個網域abc.com和xyz.com,分別產生兩張憑證。

產生憑證:

openssl req -newkey rsa:2048 -nodes -keyout abc.com.key -out abc.com.csr
openssl x509 -req -days 365 -in abc.com.csr -signkey abc.com.key -out abc.com.crt

openssl req -newkey rsa:2048 -nodes -keyout xyz.com.key -out xyz.com.csr
openssl x509 -req -days 365 -in xyz.com.csr -signkey xyz.com.key -out xyz.com.crt

產生憑證鏈:

cat abc.com. crt domain.crt > abc.com-bundle.crt
cat xyz.com.crt domain.crt > xyz.com-bundle.crt

    ##設定Nginx
#在Nginx的設定檔中,需要新增如下的設定:

http {

...
# 設定SSL快取
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

# 設定SSL憑證

server {

listen 443 ssl;
server_name abc.com;
ssl_certificate /path/to/abc.com-bundle.crt;
ssl_certificate_key /path/to/abc.com.key;

}

server {

listen 443 ssl;
server_name xyz.com;
ssl_certificate /path/to/xyz.com-bundle.crt;
ssl_certificate_key /path/to/xyz.com.key;

}

}

在設定檔中指定ssl_certificate和ssl_certificate_key即可分別使用不同的SSL憑證。同時,需要為每個網域配置一個server區塊。

    驗證設定
重啟Nginx後,即可驗證設定是否生效。在瀏覽器中輸入abc.com和xyz.com,瀏覽器會在TLS握手階段發送SNI請求並傳回對應的SSL憑證。如果請求正常返回,即可證明基於SNI的SSL解決方案已經生效。

四、總結

基於SNI的SSL解決方案可以實現在同一台伺服器上部署多個SSL證書,適用於需要使用多網域SSL加密的場景。然而,需要注意的是,SNI並不被所有的瀏覽器和伺服器支持,因此需要在使用時確保客戶端和伺服器支援同一個SSL協定版本,且客戶端必須支援SNI擴充。在設定過程中,需要為每個網域設定一個server區塊,並指定對應的SSL憑證和私鑰。

以上是Nginx反向代理中基於SNI的SSL解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn