SSL v2的設(shè)計(jì)順應(yīng)經(jīng)典的公鑰基礎(chǔ)設(shè)施PKI(public key infrastructure)設(shè)計(jì),后者認(rèn)為一個(gè)服務(wù)器只提供一個(gè)服務(wù)從而也就只使用一個(gè)證書(shū)。這意味著服務(wù)器可以在TLS啟動(dòng)的早期階段發(fā)送或提交證書(shū),因?yàn)樗浪跒槟膫€(gè)域服務(wù)。HTTP服務(wù)器開(kāi)啟虛擬主機(jī)支持后,每個(gè)服務(wù)器通過(guò)相同的地址可以為很多域提供服務(wù)。服務(wù)器檢查每一個(gè)請(qǐng)求來(lái)決定它在為哪個(gè)域服務(wù)。這個(gè)信息通常從HTTP請(qǐng)求頭獲得。不幸的是,當(dāng)設(shè)置了TLS加密,服務(wù)器在讀取HTTP請(qǐng)求里面的域名之前已經(jīng)向客戶(hù)端提交了證書(shū),也就是已經(jīng)為默認(rèn)域提供了服務(wù)。因此,這種為虛擬主機(jī)提供安全的簡(jiǎn)單途徑經(jīng)常導(dǎo)致使用了錯(cuò)誤的數(shù)字證書(shū),從而導(dǎo)致瀏覽器對(duì)用戶(hù)發(fā)出警告。
以上描述摘自O(shè)penWares。詳細(xì)了解請(qǐng)到:服務(wù)器名字指示SNI(Server Name Indication)
即訪問(wèn)www.buyberry.net會(huì)讀取到beta.buyberry.net的證書(shū),這樣瀏覽器會(huì)報(bào)證書(shū)錯(cuò)誤。
因此需要Server Name Indication (RFC 4366)這個(gè)擴(kuò)展協(xié)議來(lái)修正。標(biāo)準(zhǔn)apache是支持Name Based SSL VHosts With SNI 。前提需要 OpenSSL 0.9.8f 之后才能支持。但是IHS并不支持這個(gè)擴(kuò)展協(xié)議。
只能使用基于端口或者基于IP的虛擬主機(jī)來(lái)workaround
LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
Listen 443
Listen 444
NameVirtualHost www.buyberry.net:443
ServerName www.buyberry.net
SSLCipherSpec 34
SSLCipherSpec 35
SSLCipherSpec 3A
SSLCipherSpec 33
SSLCipherSpec 36
SSLCipherSpec 39
SSLCipherSpec 32
SSLCipherSpec 31
SSLCipherSpec 30
DocumentRoot “/ihs/htdocs”
SSLEnable
SSLClientAuth none
Keyfile “/ihs/sslkey20121227/key.kdb”
ErrorLog logs/ssl1_error_log
CustomLog logs/ssl1_access_log common env=!image
#########################################
#########################################
NameVirtualHost beta.buyberry.net:444
ServerName beta.buyberry.net
SSLCipherSpec 34
SSLCipherSpec 35
SSLCipherSpec 3A
SSLCipherSpec 33
SSLCipherSpec 36
SSLCipherSpec 39
SSLCipherSpec 32
SSLCipherSpec 31
SSLCipherSpec 30
DocumentRoot “/ihs/htdocs”
SSLEnable
SSLClientAuth none
Keyfile “/ihs/2012key/2012key.kdb”
ErrorLog logs/ssl2_error_log
CustomLog logs/ssl2_access_log common env=!image