![](/img/trans.png)
[英]How to use different vhost config files for Apache with SNI & multiple SSL certificates?
[英]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.
這篇文章似乎最接近我的問題:
但從我可以告訴我的服務器已經正確配置(顯然它不是!)
我在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。
在同一個ip地址上不可能有多個SSL域。
當客戶聯系https網站時,所有通信都將使用站點的公鑰(ssl certificat)進行加密。 只有與公鑰關聯的私鑰才能解密http請求。 基本上這就是https的工作原理 。
這就是為什么在您的虛擬主機中,您為每個ssl網站定義證書和密鑰
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key
當您使用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>
如果私鑰和公鑰(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.