隨著現(xiàn)階段流量入口已經(jīng)從PC端轉移到移動端,,其中微信小程序是一個流量極大的入口。但其要求必須是1.2以上的SSL,,所以把Windows2003這種老古董直接排除在外,。 當然有人通過端口號進行區(qū)分,不過新睿云小編覺得自己用隨意,,要是放出去基本沒戲,。大家都用443或80端口,你搞特殊化網(wǎng)站不符合用戶操作習慣,。所以這里給出的解決方案,,都是新睿云小編這里親手試了的。 1,、使用win2012版本的服務器 Windows2003與Windows2008這兩個系統(tǒng)新睿云小編這里試了一下,,確實沒有辦法實現(xiàn)一個服務器多個ssl證書,不過確實有不一樣的,,比如Windows2012 r2這個系統(tǒng)就不同,,可以跟綁定http域名一樣綁定證書,,可能微軟也自己意識到這個問題。 服務器多站點多域名HTTPS實現(xiàn) 假設有這樣一個場景,,我們有多個站點(例如site1.xinruiyun.cn,,site2.xinruiyun.cn和site3.xinruiyun.cn)綁定到同一個IP:PORT,并區(qū)分不同的主機頭,。我們?yōu)槊恳粋€SSL站點申請并安裝了證書,。在瀏覽網(wǎng)站時,用戶仍看到證書不匹配的錯誤,。 1. IIS中實現(xiàn) 問題原因 當一個https的請求到達IIS服務器時,,https請求為加密狀態(tài),需要拿到相應的服務器證書解密請求,。由于每個站點對應的證書不同,,服務器需要通過請求中不同的主機頭來判斷需要用哪個證書解密,然而主機頭作為請求的一部分也被加密,。最終IIS只好使用第一個綁定到該IP:PORT的站點證書解密請求,,從而有可能造成對于其他站點的請求失敗而報錯。 解決方案 第一種解決方案將每個https站點綁定到不同的端口,。但是這樣的話客戶端瀏覽網(wǎng)頁時必須手動指定端口,,例如 https://site.xinruiyun.cn:444 第二種解決方案是為每個站點分配一個獨立的ip,這樣沖突就解決了,,甚至主機頭也不用添加了,。 第三種解決方案是使用通配證書,。我們采用通配證書頒發(fā)給.xinruiyun.cn,,對于我們的示例中,應該采用頒發(fā)給.xinruiyun.cn的證書,,這樣任何訪問該domain的請求均可以通過該證書解密,,證書匹配錯誤也就不復存在了。 第四種解決方案是升級為IIS8,,IIS8中添加的對于SNI(Server Name Indication)的支持,,服務器可以通請求中提取出相應的主機頭從而找到相應的證書。 SNI開啟方式請參考http://www./learn/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability 2. Nginx中實現(xiàn) 打開 Nginx 安裝目錄下 conf 目錄中打開 nginx.conf 文件,,找到 server { listen 443; server_name domain1; ssl on; ssl_certificate 磁盤目錄/訂單號1.pem; ssl_certificate_key 磁盤目錄/訂單號1.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } } 在上述基礎上,,再添加另一段配置 server { listen 443; server_name dommain2; ssl on; ssl_certificate 磁盤目錄/訂單號2.pem; ssl_certificate_key 磁盤目錄/訂單號2.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } } 通過上述配置在Nginx中支持多個證書 Apache配置HTTPS虛擬主機共享443端口 Listen 443 NameVirtualHost *:443 …… ServerName www.example1.com SSLCertificateFile common.crt; SSLCertificateKeyFile common.key; SSLCertificateChainFile ca.crt …… …… ServerName www.example2.com SSLCertificateFile common2.crt; SSLCertificateKeyFile common2.key; SSLCertificateChainFile ca2.crt …… IIS6上實現(xiàn)多域名證書 檢查WINDOWS2003是否已經(jīng)升級到SP1以上版本,如果沒有升級SP1,,則后續(xù)步驟將無法完成確保使用的證書是多域名,,或者是通配符證書,兩個網(wǎng)站必須都使用這個證書,,如果這個證書的CN和SAN不包含著2個網(wǎng)站的域名,,就會報警告首先按正常的流程,,為站點1,安裝SSL證書,,并將SSL端口配置為443,。對站點2,選擇分配證書,,并選擇站點1使用的證書,,并將SSL端口配置為其他端口號(444,445,,446...) IIS SNI 4請用本機管理員登入系統(tǒng),,啟動命令行程序“cmd”。運行以下指令: cscript.exe c:/inetpub/adminscripts/adsutil.vbs set /w3svc/站點標識符/SecureBindings ":443:主機頭" 回到IIS6控制臺,,刷新,,可以發(fā)現(xiàn)網(wǎng)站2的SSL端口已經(jīng)改成443了。 IIS服務器多域名SSL證書綁定443端口解決方案 默認情況一個服務器的IIS只能綁定一個HTTPS也就是443端口 要實現(xiàn)多個站點對應HTTPS只能更改IIS配置 1,、默認情況一個服務器的IIS只能綁定一個HTTPS也就是443端口 要實現(xiàn)多個站點對應HTTPS只能更改IIS配置 首先把每個站點分配個不同端口,,如443.444.445…(一定要是多域證書) 2、然后在:C:/Windows/system32/inetsrv/config/applicationHost.config 找到 <binding protocol="https" bindingInformation="*:443" /> <binding protocol="https" bindingInformation="*:444" /> <binding protocol="https" bindingInformation="*:445" /> 修改成: <binding protocol="https" bindingInformation="*:443:www.xinruiyun.cn" /> <binding protocol="https" bindingInformation="*:443:www.xinruiyun.cn" /> <binding protocol="https" bindingInformation="*:443:www.xinruiyun.cn" /> 切記需要對應的每個站點都修改,。 然后在iis的站點上重新選擇下證書,,重啟iis站點。 至此就實現(xiàn)我們當初的目的,,同一個服務器下綁定多個SSL證書,,當然可能會有更好的辦法,如果您有更好的辦法可以給我們留言反饋,。謝謝每一位支持的小伙伴,! |
|