目錄
HTTPS伺服器最佳化
openssl
带有多个主机名的SSL证书
主机名指示
兼容性
首頁 後端開發 php教程 nginx 設定HTTPS伺服器

nginx 設定HTTPS伺服器

Aug 08, 2016 am 09:30 AM
example server ssl

http://nginx.org/cn/docs/http/configuring_https_servers.html

設定HTTPS伺服器

翻譯內容可能已經過舊。 你可以透過 英文版本 查看最近的更新。

設定HTTPS主機,必須在server設定區塊中開啟SSL協議,還需要指定伺服器端憑證和金鑰檔案的位置:

server {
    listen              443;
    server_name         www.example.com;
    ssl                 on;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}
登入後複製

伺服器憑證是公開的,會被傳送到每一個連接到伺服器的客戶端。而私鑰不是公開的,需要存放在存取受限的檔案中,當然,nginx主進程必須有讀取金鑰的權限。私鑰和憑證可以存放在同一個檔案中:

    ssl_certificate     www.example.com.cert;
    ssl_certificate_key www.example.com.cert;
登入後複製

這種情況下,憑證檔案同樣得設定存取限制。當然,雖然證書和密鑰存放在同一個文件,只有證書會發送給客戶端,密鑰不會發送。

ssl_protocols和ssl_ciphers指令可以用來強制使用者連線只能引入SSL/TLS那些強壯的協定版本和強大的加密演算法。從1.0.5版本開始,nginx預設使用「ssl_protocols SSLv3 TLSv1”和“ssl_ciphers HIGH:!aNULL:!MD5”,所以只有在先前的版本,明確地配置它們才是有意義的。從1.1.13和1.0.12版本開始,nginx預設使用“ ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2」。

CBC模式的加密演算法容易受到一些攻擊,尤其是BEAST攻擊(請參閱CVE-2011-3389)。可以透過下面配置調整為優先使用RC4-SHA加密演算法:

    ssl_ciphers RC4:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
登入後複製

HTTPS伺服器最佳化

SSL操作需要消耗CPU資源,所以在多處理器的系統,需要啟動多個工作進程,而且數量需要不少於可用CPU的數量。 CPU資源的SSL操作是SSL握手,有兩種方法可以將每個客戶端的握手操作數量降到最低:第一種是保持客戶端長連接,在一個SSL連接發送多個請求,第二種是在並發的連線或後續的連線中重複使用SSL會話參數,這樣可以避免SSL握手的操作。個會話。有些瀏覽器不接受那些眾所周知的證書認證機構簽署的證書,而另一些瀏覽器卻接受它們。但是它們本身卻不被廣泛認知,所以有些客戶端不予識別。包裹與伺服器憑證合併成一個檔案。方證書鏈合併時順序弄錯了,nginx就不能正常啟動,而且會顯示下面的錯誤訊息:

worker_processes  4;

http {
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

    server {
        listen              443;
        server_name         www.example.com;
        keepalive_timeout   70;

        ssl                 on;
        ssl_certificate     www.example.com.crt;
        ssl_certificate_key www.example.com.key;
        ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        ...
登入後複製
因為nginx首先需要用私鑰去解密伺服器證書,而遇到的卻是認證方的憑證。中間認證機構的訊息,所以不會報錯。可以使用

openssl

命令列工具來確認伺服器發送了完整的憑證鏈:

$ cat www.example.com.crt bundle.crt > www.example.com.chained.crt
登入後複製
在這個範例中,www.GoDaddy.com的伺服器憑證(#0)的受簽者(「s」)是被簽發機構(「i」)簽署的,而這個簽發機構又是證書(#1)的受簽者,接著證書(#1)的簽發機構又是證書(#2)的受簽者,最後證書(#2)是被眾所周知的簽發機構ValiCert, Inc簽發。 ValiCert, Inc的證書內嵌在瀏覽器中,被瀏覽器自動辨識(這段話神似英國詩《在Jack蓋的房子裡》裡面的內容)。

如果沒有加入認證方憑證鏈,就只會顯示伺服器憑證(#0)。

合併HTTP/HTTPS主機

如果HTTP和HTTPS虛擬主機的功能是一致的,可以配置一個虛擬主機,既處理HTTP請求,又處理HTTPS請求。 配置的方法是刪除
ssl on

的指令,並在*:443連接埠中新增參數

ssl

server {
    listen              443;
    server_name         www.example.com;
    ssl                 on;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}
登入後複製
在0.8.21版本以前,只有新增了
default

在0.8.21版本以前,只有新增了

default

參數的監聽埠才能加入
參數:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)
登入後複製

基於名字的HTTPS主機如果在同一個IP上配置多個HTTPS主機,會出現一個很普遍的問題:

server {
    listen          443;
    server_name     www.example.com;
    ssl             on;
    ssl_certificate www.example.com.crt;
    ...
}

server {
    listen          443;
    server_name     www.example.org;
    ssl             on;
    ssl_certificate www.example.org.crt;
    ...
}
登入後複製

使用上面的配置,不论浏览器请求哪个主机,都只会收到默认主机www.example.com的证书。这是由SSL协议本身的行为引起的——先建立SSL连接,再发送HTTP请求,所以nginx建立SSL连接时不知道所请求主机的名字,因此,它只会返回默认主机的证书。

最古老的也是最稳定的解决方法就是每个HTTPS主机使用不同的IP地址:

server {
    listen          192.168.1.1:443;
    server_name     www.example.com;
    ssl             on;
    ssl_certificate www.example.com.crt;
    ...
}

server {
    listen          192.168.1.2:443;
    server_name     www.example.org;
    ssl             on;
    ssl_certificate www.example.org.crt;
    ...
}
登入後複製

带有多个主机名的SSL证书

也有其他一些方法可以实现多个HTTPS主机共享一个IP地址,但都有不足。其中一种方法是使用在“SubjectAltName”字段中存放多个名字的证书,比如www.example.comwww.example.org。但是,“SubjectAltName”字段的长度有限制。

另一种方式是使用主机名中含有通配符的证书,比如*.example.org。这个证书匹配www.example.org,但是不匹配example.orgwww.sub.example.org。这两种方法可以结合在一起——使用在“SubjectAltName”字段中存放的多个名字的证书,这些名字既可以是确切的名字,也可以是通配符,比如example.org*.example.org

最好将带有多个名字的证书和它的密钥文件配置在http配置块中,这样可以只保存一份内容拷贝,所有主机的配置都从中继承:

ssl_certificate      common.crt;
ssl_certificate_key  common.key;

server {
    listen          443;
    server_name     www.example.com;
    ssl             on;
    ...
}

server {
    listen          443;
    server_name     www.example.org;
    ssl             on;
    ...
}
登入後複製

主机名指示

在一个IP上运行多个HTTPS主机的更通用的方案是TLS主机名指示扩展(SNI,RFC6066),它允许浏览器和服务器进行SSL握手时,将请求的主机名传递给服务器,因此服务器可以知道使用哪一个证书来服务这个连接。但SNI只得到有限的浏览器的支持。下面列举支持SNI的浏览器最低版本和平台信息:

  • Opera 8.0;
  • MSIE 7.0(仅在Windows Vista操作系统及后续操作系统);
  • Firefox 2.0和使用Mozilla平台1.8.1版本的其他浏览器;
  • Safari 3.2.1(Windows版需要最低Vista操作系统);
  • Chrome(Windows版需要最低Vista操作系统)。
通过SNI只能传递域名,但是,当请求中包含可读的IP地址时,某些浏览器将服务器的IP地址作为服务器的名字进行了传送。这是一个错误,大家不应该依赖于这个。

为了在nginx中使用SNI,那么无论是在编译nginx时使用的OpenSSL类库,还是在运行nginx时使用的OpenSSL运行库,都必须支持SNI。从0.9.8f版本开始,OpenSSL通过“--enable-tlsext”配置选项加入SNI支持,从0.9.8j版本开始,此选项成为默认选项。当nginx被编译成支持SNI时,在使用“-V”选项运行时会显示如下信息:

$ nginx -V
...
TLS SNI support enabled
...
登入後複製

但是,当开启SNI支持的nginx被动态链接到不支持SNI的OpenSSL库上时,nginx会显示如下警告:

nginx was built with SNI support, however, now it is linked
dynamically to an OpenSSL library which has no tlsext support,
therefore SNI is not available
登入後複製

兼容性

  • 从0.8.21和0.7.62版本开始,使用“-V”选项运行nginx时,将显示SNI支持状态信息。
  • 从0.7.14版本开始,listen指令支持ssl参数。
  • 从0.5.32版本开始,支持SNI。
  • 从0.5.6版本开始,支持SSL会话缓存,并可在工作进程间共享。
  • 0.7.65、0.8.19及以后版本,默认SSL协议是SSLv3、TLSv1、TLSc1.1和TLSv1.2(如果OpenSSL库支持)。
  • 0.7.64、0.8.18及以前版本,默认SSL协议是SSLv2、SSLv3和TLSv1。
  • 1.0.5及以后版本,默认SSL密码算法是HIGH:!aNULL:!MD5
  • 0.7.65、0.8.20及以后版本,默认SSL密码算法是HIGH:!ADH:!MD5
  • 0.8.19版本,默认SSL密码算法是ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM
  • 0.7.64、0.8.18及以前版本,默认SSL密码算法是ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
HTTPS伺服器最佳化
SSL憑證鏈
合併HTTP/HTTPS主機
基於名字的HTTPS主機
帶有多個主機名稱的SSL憑證
主機名稱指示
相容性
作者: Igor Sysoev
编辑: Brian Mercer
翻译: cfsego

以上就介绍了nginx 配置HTTPS服务器,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
等不及通用控制?現在透過 Barrier 在 Mac、PC 之間共享鍵盤和滑鼠 等不及通用控制?現在透過 Barrier 在 Mac、PC 之間共享鍵盤和滑鼠 Apr 14, 2023 pm 12:04 PM

如何使用 Barrier 在 Mac / PC 之間共用鍵盤和滑鼠您需要確保要與其共用滑鼠和鍵盤的電腦都在同一個網路上,並且在初始設定期間您將在不同的 Mac 之間來回切換。在此處取得最新版本的Barrier(適用於Mac 的DMG,適用於Windows 的exe)– 將其下載到您希望能夠使用鍵盤和滑鼠的每台電腦上將Barrier 從DMG(或使用exe 安裝到Windows)複製到您打算使用它的每台Mac 上的/Applications 資料夾,然後右鍵單擊Barr

Java8(291)之後禁用了TLS1.1使JDBC無法用SSL連接SqlServer2008怎麼解決 Java8(291)之後禁用了TLS1.1使JDBC無法用SSL連接SqlServer2008怎麼解決 May 16, 2023 pm 11:55 PM

Java8-291之後,禁用了TLS1.1,使JDBC無法用SSL連接SqlServer2008怎麼辦,以下是解決辦法修改java.security檔案1.找到jre的java.security檔案如果是jre,在{JAVA_HOME}/jre/ lib/security中,例如????C:\ProgramFiles\Java\jre1.8.0_301\lib\security如果是Eclipse綠色免安裝便攜版在安裝資料夾搜尋java.security,例如?????xxx\plugins \org

如何安裝、解除安裝、重設Windows伺服器備份 如何安裝、解除安裝、重設Windows伺服器備份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer作業系統自帶的功能,旨在協助使用者保護重要資料和系統配置,並為中小型和企業級企業提供完整的備份和復原解決方案。只有執行Server2022及更高版本的使用者才能使用此功能。在本文中,我們將介紹如何安裝、解除安裝或重設WindowsServerBackup。如何重置Windows伺服器備份如果您的伺服器備份遇到問題,備份所需時間過長,或無法存取已儲存的文件,那麼您可以考慮重新設定WindowsServer備份設定。要重設Windows

如何在HAProxy中實現SSL通過 如何在HAProxy中實現SSL通過 Mar 20, 2024 am 09:30 AM

保持Web伺服器負載平衡是預防停機的關鍵措施之一。使用負載平衡器是一種可靠的方法,其中HAProxy是一個備受推崇的選擇。使用HAProxy,您可以精確設定負載平衡方式,同時支援SSL直通,進而確保客戶端與伺服器之間的通訊安全。首先探討在HAProxy中實現SSL直通的重要性,隨後詳細討論了實施此功能所需的步驟,並提供了一個範例以便更好理解。什麼是SSL通過?為什麼它很重要?作為負載平衡器,HAProxy接受並指派流向您Web伺服器的負載,在已設定的伺服器上進行分發。負載的分配是針對客戶端設備和

MySQL: SSL 連線簡介及設定步驟 MySQL: SSL 連線簡介及設定步驟 Sep 08, 2023 pm 03:51 PM

MySQL:SSL連線簡介及設定步驟摘要:MySQL提供了SSL(SecureSocketsLayer)連線來加密在客戶端和伺服器之間傳輸的資料。本文將介紹SSL連線的概念和作用,並提供在MySQL中設定SSL連線的步驟以及相關的程式碼範例。導語:隨著網路和資料傳輸的不斷擴大,資料安全性變得越來越重要。透過使用SSL連接,我們可以加

Sharepoint安裝SSL憑證? Sharepoint安裝SSL憑證? Feb 19, 2024 am 11:27 AM

在SharePoint上安裝SSL憑證是保護網站安全性和提供加密連線的關鍵步驟。透過遵循正確的安裝步驟,您可以確保網站資料的安全性,並提昇在搜尋引擎中的排名,為訪客提供更好的使用者體驗。取得SSL憑證聯絡可信任的憑證授權單位(CA)購買SSL憑證。提供所需的身份驗證和網域名稱所有權驗證資訊。完成驗證流程後,您將收到SSL憑證檔案。準備憑證檔案使用文字編輯器開啟您的SSL憑證檔案。將證書內容複製到一個新的文字檔案中。將該檔案儲存為yourdomain.cer,確保將」yourdomain&#8221

Nginx與SSL:設定HTTPS保護Web伺服器 Nginx與SSL:設定HTTPS保護Web伺服器 Jun 09, 2023 pm 09:24 PM

Nginx是一個高效能的Web伺服器軟體,同時也是一款強大的反向代理伺服器和負載平衡器。隨著互聯網的迅速發展,越來越多的網站開始採用SSL協議保護敏感用戶數據,而Nginx也提供了強大的SSL支持,使得Web伺服器的安全性能更進一步。本文將介紹如何設定Nginx以支援SSL協議,並保護Web伺服器的安全效能。什麼是SSL協定? SSL(SecureSocke

修復:Windows PC 上 Chrome 中的 ERR_CERT_WEAK_SIGNATURE_ALGORITHM 錯誤 修復:Windows PC 上 Chrome 中的 ERR_CERT_WEAK_SIGNATURE_ALGORITHM 錯誤 Apr 18, 2023 am 09:41 AM

許多Windows用戶最近開始抱怨一個問題,即他們在瀏覽chrome瀏覽器發現不安全的網頁時收到錯誤訊息並拋出錯誤訊息YourconnectionisnotprivatewithaerrorcodeNET::ERR_CERT_WEAK_SIGNATURE_ALGORITHMonWindows11系統。現在Windows使用者不確定是什麼原因導致了這個問題,以及他們如何解決這個問題以便輕鬆瀏覽網頁。下面提到了可能導致此錯誤訊息的一些原因。 SSL憑證快取問題損壞的瀏覽數據

See all articles