zoukankan      html  css  js  c++  java
  • 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等

    在上篇随笔《基于微信小程序的系统开发准备工作》介绍了开发微信小程序的一些前期的架构设计、技术路线 、工具准备等方面内容,本篇随笔继续这个步骤,逐步介绍我们实际开发过程中对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:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2"
    md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server"
    md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client"
    
    # Enable TLS 1.2 for client and server SCHANNEL communications
    new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "Enabled" -value 1 -PropertyType "DWord"
    new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
    new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "Enabled" -value 1 -PropertyType "DWord"
    new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
    
    # Disable SSL 2.0 (PCI Compliance)
    md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server"
    new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server" -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:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2" md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" # Enable TLS 1.2 for client and server SCHANNEL communications new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord" # Disable SSL 2.0 (PCI Compliance) md "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server" new-itemproperty -path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL 2.0Server" -name Enabled -value 0 -PropertyType "DWord"

    这样启动接口,获得数据并在小程序中进行正确展示了。

  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/7230393.html
Copyright © 2011-2022 走看看