天天看点

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录

1、阿里云获取https证书

1.1、进入阿里云的域名管理页,点击你购买的域名,再点击“免费开启SSL证书”,如图:

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录

1.2、之后选择SSL证书类型,这里我选择的是免费的SSL证书,因此域名不能配置成"*",只能配置为二级域名,如图:

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录

1.3、申请证书后,在证书列表页点击下载,这里我选择的是Tomcat的证书下载,可以根据自己的需要选择。如图:

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录

1.4、下载完成后解压,得到一个pfx文件和一个密码文件,并将pfx文件上传至服务器上的tomcat/cert文件夹(路径自定),如图:

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录

2、Tomcat8.5服务器https配置

2.1、打开tomcat的配置文件server.xml,找到以下这段配置:

<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
		   maxThreads="150" SSLEnabled="true">
	<SSLHostConfig>
		<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
					 type="RSA" />
	</SSLHostConfig>
</Connector>
-->
           
小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录

2.2、放开server.xml配置中的注释,并修改SSLHostConfig里的配置为:

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录
<SSLHostConfig>
	<Certificate certificateKeystoreFile="cert/证书文件名.pfx"
				 certificateKeystorePassword="证书密码"
				 certificateKeystoreType="PKCS12" />
</SSLHostConfig>
           

PS:此处可以修改几处redirectPort端口,由8443改为443,之后https请求就无需加上端口了。但我修改为443端口后,启动Tomcat一直报错:

02-Jun-2019 13:09:44.130 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-443]]

    org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-443]]

        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)

        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:552)

        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)

        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)

        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)

        at org.apache.catalina.startup.Catalina.load(Catalina.java:639)

        at org.apache.catalina.startup.Catalina.load(Catalina.java:662)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:498)

        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)

        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)

    Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed

        at org.apache.catalina.connector.Connector.initInternal(Connector.java:995)

        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)

        ... 12 more

    Caused by: java.net.SocketException: Permission denied

        at sun.nio.ch.Net.bind0(Native Method)

        at sun.nio.ch.Net.bind(Net.java:433)

        at sun.nio.ch.Net.bind(Net.java:425)

        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)

        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)

        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:219)

        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1105)

        at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:224)

        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)

        at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:68)

        at org.apache.catalina.connector.Connector.initInternal(Connector.java:993)

        ... 13 more

02-Jun-2019 13:09:44.131 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]

02-Jun-2019 13:09:44.132 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read

02-Jun-2019 13:09:44.134 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 732 ms

02-Jun-2019 13:09:44.159 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]

02-Jun-2019 13:09:44.159 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.41

如哪位大神知道是什么原因能告知一下,感激不尽。因为这个问题,所以我就没有修改redirectPort,仍然使用默认的8443端口。因此需要提前在阿里云服务器的安全组里,打开8443端口的访问权限。

2.3、在Tomcat服务器的conf/web.xml下,最后面新增配置,将http自动转为https,如图:

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录
<!-- 配置http 自动转为 https -->
<security-constraint>
	<web-resource-collection >
			<web-resource-name >SSL</web-resource-name>
			<url-pattern>/*</url-pattern>
	</web-resource-collection>
	<user-data-constraint>
			<transport-guarantee>CONFIDENTIAL</transport-guarantee>
	</user-data-constraint>
</security-constraint>
           

2.4、重新启动Tomcat,至此服务器配置完成。

3、小程序发起https请求调用服务器

3.1、在小程序中,将服务器地址配置为https://xxx.你的域名.com:8443,即可正常通过https请求访问,如图:

小程序调用阿里云上的Tomcat8.5服务器,https配置全过程记录

3.2、在小程序的开发设置页面,配置服务器域名,与上面保持一致,即可正常请求到服务器。

4、服务器配置端口转发(追加)

4.1、后续开发中,发现可以在服务器上运行以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
           

这样就将服务器的443端口请求,转发到了8443端口。因此我们在请求的时候就无需再加8443端口号,而是直接https请求就可以。