有没有办法强制应用程序使用https而不是http发布

时间:2017-05-08 22:43:47

标签: apache http web service tcp

我有一个向Web服务发送请求的应用程序。遗憾的是,应用程序已编译,并且指向Web服务的链接作为http嵌入到应用程序中。 (是的,我知道这是多么愚蠢,我没有写出来)

最近,第三方公司不再允许http请求,一切都必须是https。

该应用程序在Tomcat上作为webapp运行。服务器是Windows服务器。

有没有办法拦截对此Web服务的调用并强制它使用https?

2 个答案:

答案 0 :(得分:1)

由于您无法更改应用程序的源代码(因为它已编译),您也无法更改Web服务(因为它是第三方),唯一的方法是解决这个问题的方法是在应用程序和Web服务之间建立代理。为此,您需要(假设代理在localhost中运行):

  1. 当Web服务URL嵌入到已编译的应用程序中时,为了让应用程序向我们的代理发送HTTP请求,主机映射需要更改(例如/etc/hosts)以覆盖DNS。例如,如果应用程序中的HTTP请求为GET http://example.com/api/sample,则在/etc/hosts中,example.com需要映射到127.0.0.1
  2. 在localhost中创建代理Web服务器,并打开与Web服务相同的端口。这个代理是一个非常简单的Web服务器(任何后端编程技术都可以做到),它只负责请求转发。这样,当应用程序向example.com发送HTTP请求时,它会将请求发送到代理服务器。
  3. 从应用程序接收到HTTP请求后,代理服务器提取请求URL /标题/正文并向example.com的真实IP地址发送HTTPS请求。请注意:在此HTTPS请求中,应添加值为host的标头example.com。第三方Web服务可能会检查此标题。
  4. example.com返回实际响应后,代理会将其返回给应用程序。
  5. 当然,您也可以使用逆向工程(Java Decompiler)来获取应用程序"源代码",更改Web服务URL然后再次编译到webapp。但是,由于应用程序可能需要更新/升级并且可能不在您的控制之下,因此不建议使用此逆向工程方法。

答案 1 :(得分:0)

您可以使用代理脚本。用您想要的任何服务器端语言编写它,例如PHP,将API URL设置为此脚本,脚本为您执行https请求并将结果传递回您的应用程序。

您也可以使用Apache本身作为代理,并使用类似:Apache config: how to proxypass http requests to https

的内容