SSL v2的設計順應經典的公鑰基礎設施PKI(public key infrastructure)設計,后者認為一個服務器只提供一個服務從而也就只使用一個證書。這意味著服務器可以在TLS啟動的早期階段發送或提交證書,因為它知道它在為哪個域服務。HTTP服務器開啟虛擬主機支持后,每個服務器通過相同的地址可以為很多域提供服務。服務器檢查每一個請求來決定它在為哪個域服務。這個信息通常從HTTP請求頭獲得。不幸的是,當設置了TLS加密,服務器在讀取HTTP請求里面的域名之前已經向客戶端提交了證書,也就是已經為默認域提供了服務。因此,這種為虛擬主機提供安全的簡單途徑經常導致使用了錯誤的數字證書,從而導致瀏覽器對用戶發出警告。
以上描述摘自OpenWares。詳細了解請到:服務器名字指示SNI(Server Name Indication)
即訪問www.buyberry.net會讀取到beta.buyberry.net的證書,這樣瀏覽器會報證書錯誤。
因此需要Server Name Indication (RFC 4366)這個擴展協議來修正。標準apache是支持Name Based SSL VHosts With SNI 。前提需要 OpenSSL 0.9.8f 之后才能支持。但是IHS并不支持這個擴展協議。
只能使用基于端口或者基于IP的虛擬主機來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