在上篇隨筆《基於微信小程式的系統開發準備工作》介紹了開發微信小程式的一些前期的架構設計、技術路線 、工具準備等方面內容,本篇隨筆繼續這個步驟,逐步介紹我們實際開發過程中對SSL協議的申請及後期處理過程,包括證書的IIS埠綁定,以及解決“”小程式要求的 TLS 版本必須大於等於 1” 的問題。 ...
在上篇隨筆《基於微信小程式的系統開發準備工作》介紹了開發微信小程式的一些前期的架構設計、技術路線 、工具準備等方面內容,本篇隨筆繼續這個步驟,逐步介紹我們實際開發過程中對SSL協議的申請及後期處理過程,包括證書的IIS埠綁定,以及解決“”小程式要求的 TLS 版本必須大於等於 1” 的問題。
1、證書申請及成功的後續處理
小程式的配置要求我們必須在網站提供443埠服務,需要加入HTTPS證書,這種證書可以從雲服務商上購買,如騰訊雲、阿裡雲上的雲伺服器後臺都提供了購買證書服務的通道,以阿裡雲為例,使用阿裡雲賬號登陸後,在【控制台】【安全雲盾】【證書服務】裡面進行申請。
購買證書,我們在沒有太多資金支持的情況下,可以考慮先使用免費SSL證書,阿裡雲上提供 免費型DV SSL的申請,購買後,會在訂單列表裡面有一個待審核的訂單,如下所示,等待審核通過即可使用。
一般情況下,如果我們填寫的資料正確,會較快通過審核的,如果我們的DNS不在萬網上,那麼我們還需要到服務商的網站進行添加阿裡雲的DNS配置。通過我們在提交信息的時候,如果是Windows伺服器,因此會勾選DNS方式驗證,如下所示。
這樣提交成功後,會同時在伺服器的雲解析上面自動增加一條記錄,如下所示
如果我們的申請的免費SSL證書獲得通過,那麼狀態會變為【已簽發】,如下所示,這個時候就可以用了。
下載的證書包括幾個文件,如下所示。
我們在IIS伺服器上雙擊pfx文件,預設一步步操作即可把證書增加加到對應的目錄裡面了。
接著我們可以在控制臺中查看到對應的證書位置。
然後在IIS裡面綁定443埠,選擇對應的SSL證書即可完成對SSL證書的綁定了,如下圖所示。
這個時候,如果我們訪問網站(我們官網是https://www.iqidi.com),那麼 就可以在瀏覽器的左側看到證書的信息了。
2、微信小程式整合處理
為了整合遠程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"
這樣啟動介面,獲得數據併在小程式中進行正確展示了。