簡體   English   中英

Apache SNI:一個IP地址上的多個SSL證書

[英]Apache SNI: multiple SSL certificates on one IP address

今天我正在嘗試將Apache配置為運行兩個域,每個域都有自己的SSL證書。 據我所知,只要我的Apache配置了最新版本的OpenSSL,SNI就支持這一點。 我確認它是:

[notice] Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.7 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/1.0.1 configured -- resuming normal operations

我以為我已經成功設置了第二個域和證書,​​但是當我嘗試訪問chrome中的第二個域時,我收到以下錯誤:

You attempted to reach example2.com, but instead you actually reached a server identifying itself as example1.com.

這篇文章似乎最接近我的問題:

在apache上托管多個SSL證書

但從我可以告訴我的服務器已經正確配置(顯然它不是!)

我在example2.com的conf文件中有以下指令

ServerName  example2.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key

它看起來對我來說。 那么為什么apache在訪問example2時會提供example1的證書?

結果是域1被配置為

<VirtualHost *:443>

我使用webmin,它只在您直接查看指令時顯示該細節。

改變*是解決方案的一部分,但引入了一些其他問題。 我想我會踢和做基於IP的SSL。

我將它添加到ports.conf(Apache / 2.2.22)

NameVirtualHost *:443

您可以在這篇文章中閱讀詳細信息

在同一個ip地址上不可能有多個SSL域。

上下文

當客戶聯系https網站時,所有通信都將使用站點的公鑰(ssl certificat)進行加密。 只有與公鑰關聯的私鑰才能解密http請求。 基本上這就是https的工作原理
這就是為什么在您的虛擬主機中,您為每個ssl網站定義證書和密鑰

SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key

VirtualHost名稱庫和SSL

當您使用VirtualHost名稱庫時 ,當apache收到客戶端請求時,服務器會讀取請求並查看請求的域名。 當域名被識別時,apache讀取virtuahost指令並返回好的網站。

當apache收到SSL請求時,系統無法解密消息,因為apache需要使用Virtualhost中定義的SSLCertificateKeyFile ,但要知道要使用哪個虛擬主機,他需要能夠解密消息....因為apache don'知道如何處理您的請求系統返回處理的第一個虛擬主機。

這就是為什么你需要使用VirtualHost ip base ,它在示例中使用了什么:
在apache上托管多個SSL證書您有2個ip 1.1.1.1和2.2.2.2

NameVirtualHost 1.1.1.1:443
NameVirtualHost 2.2.2.2:443
<VirtualHost 1.1.1.1:443>
  ServerName www.domain1.com
  ...
  ...
</VirtualHost>
<VirtualHost 2.2.2.2:443>
  ServerName www.domain2.com
  ...
  ...
</VirtualHost>

VirtualHost名稱庫和SSL通配符證書

如果私鑰和公鑰(ssl certificat)對於所有域都相同,則apache將能夠解密通信。 僅當您對域使用通配符證書時才會附加此情況。 例如,如果您有* .domain.com的通配符,則可以像這樣定義VirtualHost名稱庫

NameVirtualHost 1.1.1.1:443

<VirtualHost 1.1.1.1:443>
   ServerName  foo.domain.com
   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/wildcard.domain.com.crt
   SSLCertificateKeyFile /etc/apache2/ssl/wildcard.domain.com.key
   ... 
   ...
</VirtualHost>

<VirtualHost 1.1.1.1:443>
   ServerName  bar.domain.com
   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/wildcard.domain.com.crt
   SSLCertificateKeyFile /etc/apache2/ssl/wildcard.domain.com.key
   ... 
   ...
</VirtualHost>

這種配置將起作用,因為無論域名如何,apache都使用相同的私鑰來解密通信,因此系統將能夠選擇好的VirtualHost設置。

祝你今天愉快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM