隨着現階段流量入口已經從PC端轉移到移動端,其中微信小程序是一個流量極大的入口。但其要求必須是1.2以上的SSL,因此把Windows2003這種老古董直接排除在外。
固然有人經過端口號進行區分,不過新睿雲小編以爲本身用隨意,要是放出去基本沒戲。你們都用443或80端口,你搞特殊化網站不符合用戶操做習慣。因此這裏給出的解決方案,都是新睿雲小編這裏親手試了的。
一、使用win2012版本的服務器
Windows2003與Windows2008這兩個系統新睿雲小編這裏試了一下,確實沒有辦法實現一個服務器多個ssl證書,不過確實有不同的,好比Windows2012 r2這個系統就不一樣,能夠跟綁定http域名同樣綁定證書,可能微軟也本身意識到這個問題。html
服務器多站點多域名HTTPS實現
假設有這樣一個場景,咱們有多個站點(例如site1.xinruiyun.cn,site2.xinruiyun.cn和site3.xinruiyun.cn)綁定到同一個IP:PORT,並區分不一樣的主機頭。咱們爲每個SSL站點申請並安裝了證書。在瀏覽網站時,用戶仍看到證書不匹配的錯誤。nginx
問題緣由
當一個https的請求到達IIS服務器時,https請求爲加密狀態,須要拿到相應的服務器證書解密請求。因爲每一個站點對應的證書不一樣,服務器須要經過請求中不一樣的主機頭來判斷須要用哪一個證書解密,然而主機頭做爲請求的一部分也被加密。最終IIS只好使用第一個綁定到該IP:PORT的站點證書解密請求,從而有可能形成對於其餘站點的請求失敗而報錯。
解決方案
第一種解決方案將每一個https站點綁定到不一樣的端口。可是這樣的話客戶端瀏覽網頁時必須手動指定端口,例如 https://site.xinruiyun.cn:444
第二種解決方案是爲每一個站點分配一個獨立的ip,這樣衝突就解決了,甚至主機頭也不用添加了。
第三種解決方案是使用通配證書。咱們採用通配證書頒發給.xinruiyun.cn,對於咱們的示例中,應該採用頒發給.xinruiyun.cn的證書,這樣任何訪問該domain的請求都可以經過該證書解密,證書匹配錯誤也就不復存在了。
第四種解決方案是升級爲IIS8,IIS8中添加的對於SNI(Server Name Indication)的支持,服務器能夠通請求中提取出相應的主機頭從而找到相應的證書。
SNI開啓方式請參考http://www.iis.net/learn/get-...小程序
打開 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上實現多域名證書
檢查WINDOWS2003是否已經升級到SP1以上版本,若是沒有升級SP1,則後續步驟將沒法完成確保使用的證書是多域名,或者是通配符證書,兩個網站必須都使用這個證書,若是這個證書的CN和SAN不包含着2個網站的域名,就會報警告首先按正常的流程,爲站點1,安裝SSL證書,並將SSL端口配置爲443。對站點2,選擇分配證書,並選擇站點1使用的證書,並將SSL端口配置爲其餘端口號(444,445,446...)微信小程序
IIS SNI 4請用本機管理員登入系統,啓動命令行程序「cmd」。運行如下指令:
cscript.exe c:/inetpub/adminscripts/adsutil.vbs set /w3svc/站點標識符/SecureBindings ":443:主機頭"
回到IIS6控制檯,刷新,能夠發現網站2的SSL端口已經改爲443了。
IIS服務器多域名SSL證書綁定443端口解決方案
默認狀況一個服務器的IIS只能綁定一個HTTPS也就是443端口
要實現多個站點對應HTTPS只能更改IIS配置
一、默認狀況一個服務器的IIS只能綁定一個HTTPS也就是443端口
要實現多個站點對應HTTPS只能更改IIS配置
首先把每一個站點分配個不一樣端口,如443.444.445…(必定要是多域證書)
二、而後在: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站點。
至此就實現咱們當初的目的,同一個服務器下綁定多個SSL證書,固然可能會有更好的辦法,若是您有更好的辦法能夠給咱們留言反饋。謝謝每一位支持的小夥伴!服務器