在上篇隨筆《基於微信小程序的系統開發準備工做》介紹了開發微信小程序的一些前期的架構設計、技術路線 、工具準備等方面內容,本篇隨筆繼續這個步驟,逐步介紹咱們實際開發過程當中對SSL協議的申請及後期處理過程,包括證書的IIS端口綁定,以及解決「」小程序要求的 TLS 版本必須大於等於 1」 的問題。html
小程序的配置要求咱們必須在網站提供443端口服務,須要加入HTTPS證書,這種證書能夠從雲服務商上購買,如騰訊雲、阿里雲上的雲服務器後臺都提供了購買證書服務的通道,以阿里云爲例,使用阿里雲帳號登錄後,在【控制檯】【安全雲盾】【證書服務】裏面進行申請。json
購買證書,咱們在沒有太多資金支持的狀況下,能夠考慮先使用免費SSL證書,阿里雲上提供 免費型DV SSL的申請,購買後,會在訂單列表裏面有一個待審覈的訂單,以下所示,等待審覈經過便可使用。小程序
通常狀況下,若是咱們填寫的資料正確,會較快經過審覈的,若是咱們的DNS不在萬網上,那麼咱們還須要到服務商的網站進行添加阿里雲的DNS配置。經過咱們在提交信息的時候,若是是Windows服務器,所以會勾選DNS方式驗證,以下所示。windows
這樣提交成功後,會同時在服務器的雲解析上面自動增長一條記錄,以下所示微信小程序
若是咱們的申請的免費SSL證書得到經過,那麼狀態會變爲【已簽發】,以下所示,這個時候就能夠用了。瀏覽器
下載的證書包括幾個文件,以下所示。安全
咱們在IIS服務器上雙擊pfx文件,默認一步步操做便可把證書增長加到對應的目錄裏面了。服務器
接着咱們能夠在控制檯中查看到對應的證書位置。微信
而後在IIS裏面綁定443端口,選擇對應的SSL證書便可完成對SSL證書的綁定了,以下圖所示。架構
這個時候,若是咱們訪問網站(咱們官網是https://www.iqidi.com),那麼 就能夠在瀏覽器的左側看到證書的信息了。
爲了整合遠程HTTPS鏈接獲取數據,咱們須要進行部署一個Web API的接口,那麼咱們能夠創建一個進行MVC控制器進行測試,以下咱們在控制器裏面添加一個方法來獲取第三方接口的數據,而後返回來給咱們的小程序使用。
例如,咱們以鏈接地址:http://m.maoyan.com/movie/list.json返回的數據爲例,這個接口用來獲取電影的數據,得到的結果以下所示。
因爲小程序對域名的限制,咱們不能使用第三方的API接口,所以須要在本身域名內部的API進行封裝處理,而後再提供給本身的小程序使用,咱們創建一個MVC的控制器方法,以下代碼所示。
/// <summary> /// 增長一個域名內的接口,供小程序測試 /// </summary> /// <returns></returns> [HttpPost] public ActionResult Movies(int offset = 0, string type = "hot", int limit=6) { var url = "http://m.maoyan.com/movie/list.json"; var postData = string.Format("?offset={0}&type={1}&limit={2}", offset,type,limit); HttpHelper helper = new HttpHelper(); string result = helper.GetHtml(url+ postData, "", false); return Content(result); }
這樣咱們使用Fiddler測試的時候,確信可以得到返回的JSON數據,在進行小程序的測試便可。
執行POST數據的處理,能夠得到對應的JSON數據,以下所示。
不過若是咱們這個時候整合小程序進行測試,以下代碼所示。
onShow: function () { var that = this wx.request({ url: 'https://www.iqidi.com/h5/movies', data: { offset: 0, type: 'hot', limit: that.data.limit }, method : 'POST', header: { 'Content-Type': 'application/json' }, success: function (res) { console.log(res.data) that.setData({ films: res.data.data.movies, loading: true }) } })
那麼上述的處理操做,仍是沒有可以獲取正確的結果的,調試小程序發現,它提示」小程序要求的 TLS 版本必須大於等於 1.2「」。
在網站上找到對應的解決方案,測試後正確解決問題:在 PowerShell中運行如下內容, 而後重啓服務器
# Enables TLS 1.2 on windows Server 2008 R2 and Windows 7 # These keys do not exist so they need to be created prior to setting values. md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" # Enable TLS 1.2 for client and server SCHANNEL communications new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord" # Disable SSL 2.0 (PCI Compliance) md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" -name Enabled -value 0 -PropertyType "DWord" # Enables TLS 1.2 on Windows Server 2008 R2 and Windows 7 # These keys do not exist so they need to be created prior to setting values. md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" # Enable TLS 1.2 for client and server SCHANNEL communications new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord" # Disable SSL 2.0 (PCI Compliance) md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" -name Enabled -value 0 -PropertyType "DWord"
這樣啓動接口,得到數據並在小程序中進行正確展現了。