2017-05-08 107 views
2

我有一個應用程序發送請求到Web服務。不幸的是,應用程序被編譯,並且到web服務的鏈接作爲http嵌入到應用程序中。 (是的,我知道這是多麼愚蠢,我沒有寫它)有沒有辦法強制應用程序發佈使用https而不是http

最近,第三方公司不再允許http請求,一切都必須是https。

該應用程序在Tomcat上作爲webapp運行。該服務器是一個Windows服務器。

有沒有辦法攔截對這個Web服務的調用並強制它使用https?

回答

0

您可以使用代理腳本。用你想要的任何服務器端語言編寫,例如PHP,將API URL設置爲這個腳本,腳本爲你做https請求並將結果傳回給你的應用程序。

你也可以使用Apache本身作爲代理,並使用類似:Apache config: how to proxypass http requests to https

1

正如你不能改變應用程序的源代碼(因爲它是編譯),並且不能更改Web服務(因爲它是第三方),解決此問題的唯一方法是使成爲應用程序和Web服務之間的代理。要做到這一點,你需要(假定代理在本地主機上運行):

  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服務器(任何後端編程技術都可以做到),它只負責請求轉發。這樣,當應用程序發送HTTP請求到example.com時,它將請求發送到代理服務器。
  3. 代理服務器收到來自應用程序的HTTP請求後,提取請求的URL/header/body併發送HTTPS請求至example.com的真實IP地址。請注意:在此HTTPS請求中,應添加標頭host,其值爲example.com。第三方網絡服務可能會檢查此標題。
  4. example.com返回實際響應後,代理將把它返回給應用程序。

當然,你也可以使用逆向工程(Java反編譯)獲取應用程序的「源代碼」,更改Web服務URL,然後重新編譯爲一個Web應用程序。但是,由於應用程序可能需要更新/升級,並且可能不受您的控制,因此不建議使用這種逆向工程方法。

相關問題