zoukankan      html  css  js  c++  java
  • 微信小程序域名+https的使用

    前言

        有开发过微信小程序的园友们应该都知道,微信小程序生产版本的前端对后端调用时,必须是用https+域名的方式调用(测试版本不受此限制),而且必须用默认端口不能手动指定端口,否则微信会给拦截下来无法调用。前段时间博主走了一遍这样的流程,特此记录下在此过程中遇到的坑,希望后面再有人遇到能躲避过去。

    正文

    首先是域名申请。使用的云服务器、申请域名和申请SSL证书要尽量在同一家服务商(尤其是域名和SSL证书的申请),因为服务商们为了提高用户粘性,会给本家的服务提供便捷的处理方式。比如博主用的是阿里云的服务器,就在阿里云申请的域名和SSL证书,你要是用的腾讯云,在腾讯云上申请就好了。

    域名申请后需要实名认证、配置ip的解析。做完这些之后如果你用域名访问服务器的接口,会提示连接被重置。为什么呢?因为还需要备案,在国内未备案的域名是不会调到对应IP的。备案还是在申请域名的地方申请,一般需要走两个流程,一个是阿里云这边的处理流程,一个是工信部的处理流程。前者一般一两天就好了,后者大约需要十天半个月的时间。等备案完成之后,你才能用域名访问到对应IP的后台。

    其次是SSL证书申请。同样在对应的服务平台申请,这时如果证书与域名是在同一个平台申请的,直接点点点就好了。证书审批比较快,一般几分钟就好了。

    最后是证书安装。证书可下载之后,将tomcat对应的证书下载下来。解压之后有两个文件,一个pfx后缀的,一个存放密码的txt文件。yaml文件这样配置:

     1 server:
     2   port: 443
     3   tomcat:
     4     uri-encoding: UTF-8
     5     max-http-form-post-size: 0
     6 
     7   ssl:
     8     key-store: xxoo.pfx
     9     key-store-password: yyy
    10     key-store-type: PKCS12

    暴露https的默认端口443(注意云服务器上也要放开该端口的访问权限),key-store是对应pfx文件,下面password是密码,type固定如图所填。注意key-store后面没用classpath,因为博主将pfx文件放在了jar包所在的目录下,与jar包同级。

    yaml文件配置完之后还要配置tomcat,springboot的tomcat可以直接用注解+代码的方式来配置,如下所示:

     1 @Bean
     2     public ConfigurableServletWebServerFactory webServerFactory() {
     3         TomcatServletWebServerFactory tomcatFactory = new TomcatServletWebServerFactory();    tomcatFactory.setProtocol("org.apache.coyote.http11.Http11NioProtocol");
     4         tomcatFactory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
     5             @Override
     6             public void customize(Connector connector) {
     7                 Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
     8                 connector.setPort(443);
     9                 connector.setScheme("https");
    10                 connector.setEnableLookups(false);
    11                 connector.setProperty("acceptCount", "2000");
    12                 connector.setURIEncoding("UTF-8");
    13                 connector.setMaxPostSize(-1);
    14                 connector.setMaxSavePostSize(-1);
    15 
    16                 protocol.setProperty("bufferPoolSize", "-1");
    17                 protocol.setMaxConnections(2500);
    18                 protocol.setConnectionTimeout(60000);
    19                 protocol.setDisableUploadTimeout(true);
    20                 protocol.setCompression("on");
    21                 protocol.setCompressionMinSize(860);
    22                 protocol.setNoCompressionUserAgents("gozilla, traviata");
    23                 protocol.setMaxThreads(500);
    24                 protocol.setSSLEnabled(true);
    25                 protocol.setSecure(true);
    26 protocol.setCiphers("TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"); // ***
    27                 protocol.setMinSpareThreads(25);
    28                 protocol.setKeepAliveTimeout(3000);
    29                 protocol.setMaxKeepAliveRequests(100000000);
    30             }
    31         });
    32         Connector connector2 = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    33         Http11NioProtocol protocol = (Http11NioProtocol) connector2.getProtocolHandler();
    34         connector2.setPort(httpPort);
    35         connector2.setEnableLookups(false);
    36         connector2.setProperty("acceptCount", "2000");
    37         connector2.setURIEncoding("UTF-8");
    38         connector2.setMaxPostSize(-1);
    39         connector2.setMaxSavePostSize(-1);
    40 
    41         protocol.setProperty("bufferPoolSize", "-1");
    42         protocol.setMaxConnections(2500);
    43         protocol.setConnectionTimeout(60000);
    44         protocol.setDisableUploadTimeout(true);
    45         protocol.setCompression("on");
    46         protocol.setCompressionMinSize(860);
    47         protocol.setNoCompressionUserAgents("gozilla, traviata");
    48         protocol.setMaxThreads(500);
    49         protocol.setMinSpareThreads(25);
    50         protocol.setKeepAliveTimeout(3000);
    51         protocol.setMaxKeepAliveRequests(100000000);
    52 tomcatFactory.addAdditionalTomcatConnectors(connector2);
    53         return tomcatFactory;
    54     }

    因为博主的服务同时暴露了两个端口,所以配置了两个connector。其中第26行是比较关键的,如果未设置的话,访问时浏览器会提示【ERR_SSL_VERSION_OR_CIPHER_MISMATCH】。

    如此,大功告成。

  • 相关阅读:
    如何写出无法维护的代码
    阅读优秀代码是提高开发人员修为的一种捷径
    防止代码变质的思考与方法
    干掉你程序中的僵尸代码
    如何防止代码腐烂
    迈出单元测试的第一步
    使用VC6.0编译C++代码的时候报错:fatal error C1071: unexpected end of file found in comment(Mark ZZ)
    Android中onTouch方法的执行过程以及和onClick执行发生冲突的解决办法
    Java中JNI的使用详解第三篇:JNIEnv类型中方法的使用
    Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释
  • 原文地址:https://www.cnblogs.com/zzq6032010/p/14257467.html
Copyright © 2011-2022 走看看