我有一個遺留的java web應用程序,它可以調用外部web服務。該服務的提供商正在關閉TLS1.0支持。所以,我試圖看看應用程序如何繼續使用該服務。java 1.6使用代理的TLS1.2支持nginx/squid解決方案問題
我所看到的選項是:a)使用BouncyCastle的JCE而不是Java JCE http://boredwookie.net/index.php/blog/how-to-use-bouncy-castle-lightweight-api-s-tlsclient/,我想需要更改代碼/編譯(我們沒有這樣做的奢侈品)或2)使用代理服務器https://www.reddit.com/r/sysadmin/comments/48gzbi/proxy_solution_to_bump_tls_10_connection_to_tls_12/
我試過nginx代理 - 它似乎不處理終端服務器期望的TLS1.0傳入和TLS1.2之間的切換。
server { listen 443 ssl; server_name proxy.mydomain.com;
ssl_certificate D:/apps/openssl/proxy.mydomain.com.cert; ssl_certificate_key D:/apps/openssl/proxy.mydomain.com.private; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5- DES-CBC3-SHA:SRP; ssl_prefer_server_ciphers;
位置/ { proxy_pass https://fancyssl.hboeck.de/; }
由於https://fancyssl.hboeck.de僅支持TLS1.2,但與支持TLS1.0的https://www.google.com一起使用,因此502 /錯誤網關錯誤失敗。
我在Windows上這樣做。
謝謝你的詳細解釋。我對此很陌生 - 不得不訴諸於此,因爲重新編譯代碼庫不是一種選擇。我能夠通過proxy_ssl_server_name on指令來訪問服務器。你提到我擁有的ssl_ciphers字符串是無用的。你能否詳細說明一下?如果可能,請分享你的nginx配置。 – shikarishambu
@shikarishambu爲什麼重新編譯? Java字節碼向上兼容;我一直在j8上運行j6編譯的庫,沒有問題。除非你使用JNI? –
感謝您的更新。我從你的回答中學到了很多東西。我不認爲java6代碼可以在沒有問題的較新的java版本中運行。無論如何,我嘗試了你所說的並且遇到了一些問題。這段代碼大約10歲 - 從java1開始。然後大約6年後,它又升到了java6。我有幾個選項可以嘗試。感謝您的幫助。 – shikarishambu