由于微信小程序服务端的要求,对于服务端要求必须是域名而且是HTTPS,所以最近就研究了一把
作为Android开发的我,仅仅对服务端有一定基础上的研究,就是会用些简单的用法,比如吹吹牛逼,砍砍大山
由于SSL验证分为两类:密钥库类型和证书类型,但是配置是一样的
由于我们服务端用的java,所以我们选择了密钥库的加密方式
测试密钥库
申请密钥库
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
配置密钥库
在:application.properties进行配置
server.port=443
##签名文件
server.ssl.key-store=keystore.p12
##签名密码
server.ssl.key-store-password=111111
##签名类型
server.ssl.keyStoreType=PKCS12
##签名别名
server.ssl.keyAlias:tomcat
设置Https -> Http
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(8080);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(8443);
return connector;
}
这个时候,当我们访问8080的时候就自动转到了8443的端口,在这里存在一个默认关系:
8843 -> 443
8080 -> 80
这个关系主要在服务端体现比较明显
正式密钥库
域名证书申请+域名解析
这个地方我们主要是对域名进行解析到ip,这个地方有个坑,就是你的阿里云的域名是无法解析到腾讯的服务器,具体可能是disqus和wanwang的区别吧,域名解析完后我们就可以去腾讯SSL证书中去申请免费的证书啦
密钥库分类
当我们下载完证书后,会看到各种服务器的证书,所以在这里我们选择了Tomcat下的密钥库
配置文件配置
我们需要在application.properties进行配置,这里我们一定要留意,我们申请的密钥库tomcat服务器下密钥库类型为:JKS
server.port=443
server.ssl.key-store=
server.ssl.key-store-password=
server.ssl.keyStoreType=JKS
server.ssl.keyAlias:
这样配置后,我们就可以进行打包啦,打包后放到服务器后,记得把证书也同时上传,否则是无法运行的
服务器配置
当然,我们的服务器选择了CentOs6.8的操作系统,服务器只安装了一个java环境,我们在通过maven打包后,我们上传到了服务器,然后通过java -jar xxx 进行运行
在这里踩了一些坑,到最后总结了下,就是我的密钥库类型选错了,所以导致了我一直没法运行;
关于端口的解释:我们在配置文件中配置了端口为443,因为https的默认端口为443
关于网络,有一些默认的端口,这些端口是不需要加端口也可以运行的
- http 80
- https 443
- tomcat 8080
在这里:我们通过代码控制后,当我们访问8080->80
,我们进行重定向到8443
,然后因为服务器端口的映射,所以8443->443
这就是前面所解释的:
8080 -> 80
8443 -> 443
扩展
这个扩展主要是我在期间踩的坑
在我没有发现问题的时候,我想到其他的解决方案,我用nginx做反向代理,然后我在nginx去配置证书,emm,最后结果行不通,WTF,当时绝望死了,真TM难玩,还不如搬砖呢~~