Heroku:使用https tomcat服务器和证书锁定的Spring Boot Gradle应用程序
我有一个Spring Boot java应用程序,它使用自签名证书与android前端进行通信。
我使用一个tomcat服务器作为应用程序的容器:
compile 'org.springframework.boot:spring-boot-starter-tomcat'
现在,我启用了https / ssl:
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.addConnectorCustomizers(connector -> {
connector.setPort(Integer.parseInt(serverPort));
connector.setSecure(true);
connector.setScheme("https");
我必须启用SSL,因为我想让我的android前端安全地与我的服务器通信。 我使用称为证书锁定的技术,这意味着我将同一个自签名证书添加到我的服务器和我的Android应用程序中。 对于两者之间的任何http通信,通信将使用相同证书的密钥进行加密,因此服务器和Android应用程序将能够相互了解。
当我将它加载到Heroku中时,每次尝试调用服务器时都会收到错误:
2015-12-11T20:04:32.424629+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/getfood?postid=566348364a918a12046ce96f" host=app.herokuapp.com request_id=bf975c13-69f3-45f5-9e04-ca6817b6c410 fwd="197.89.172.181" dyno=web.1 connect=0ms service=4ms status=503 bytes=0
根据朱莉的这篇博客:http://juliekrueger.com/blog/
作为一个侧面说明,Heroku应用默认为https启用。 我正在安装的服务器已将Tomcat配置为使用https,并试图访问端点时返回了一个代码= H13 desc =“Connection closed without response”错误。 在我删除配置后,错误消失了。
我可以通过从我的tomcat服务器上删除ssl / https来修复错误,但正如我所提到的,我想使用证书锁定技术来保护通信。
我正在考虑是否可以在heroku上禁用SSL,但保持我的Tomcat服务器SSL处于活动状态,但我已经联系了Heroku,他们告诉我,禁用标准服务的搭载SSL是不可能的。
我也在这里看到了名为SSL端点的付费替代方案,但它似乎只适用于自定义域。 由于所有端点都是在我的android应用程序中编码的,并且对用户不可见,所以我使用自定义域名没有任何意义。 此外,我认为它不会解决我的问题,因为它的唯一目标似乎是创建自定义域:
SSL端点仅对自定义域有用。 所有默认的appname.herokuapp.com域都已启用SSL,可以通过https访问,例如https://appname.herokuapp.com。
我现在搜索了几天,似乎无法提出解决方案。 禁用我的tomcat端的ssl在我看来是不可接受的,因为它带来了太多的风险。 我甚至会考虑其他服务(Azure等),如果这能解决我的问题。
关于如何解决这个问题的任何想法?
使用Heroku,为了使用您自己的自定义SSL,您需要使用自定义域和SSL Endpoint插件,它可能对您的情况没有意义,但它是使用自己的证书的唯一方法。
我还没有尝试过所有提供商,但与我尝试的提供商完全相同,只有在您使用自定义域名时才可以使用自定义SSL证书。
虽然,浏览谷歌有点,发现这篇博客文章,它介绍了如何使用中间DNS服务与Heroku交流。 在DNS服务和Heroku之间的通信中,使用提供的heroku SSL证书,但是从客户端到DNS服务使用不同的证书,因此可能会有所帮助。
更新 :一个可能的解决方案是使用亚马逊网络服务,其中的协议是租用虚拟机,并允许您设置自己的环境,这意味着您可以安装自己的Tomcat并使用自己的自定义SSL。
更新2 :还有AWS的CloudFront,您可以在这里使用您自己的证书
链接地址: http://www.djcxy.com/p/31073.html上一篇: Heroku: Spring Boot Gradle app with https tomcat server and certificate pinning