在上篇隨筆《基於微信小程式的系統開發準備工作》介紹了開發微信小程式的一些前期的架構設計、技術路線 、工具準備等方面內容,本篇隨筆繼續這個步驟,逐步介紹我們實際開發過程中對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 = , string type = "hot", int limit=)
{
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"
這樣啟動介面,獲得資料並在小程式中進行正確展示了。