JDK1.6使用BouncyCastle第三方jar支持TSL1.2通过Nginx转发多个HTTPS接口

        应用从DMZ迁移到内网后,就不能连接外网了,必须通过代理服务器才能调用第三方接口。使用Nginx作为代理服务器,HTTP的接口代理没有问题,HTTPS的代理采用Nginx的TCP转发模块(Module ngx_stream_core_module)。多个HTTPS接口转发时,需要额外使用preread模块(Module ngx_stream_ssl_preread_module)。HTPPS的接口代理Java后台总是报错:

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Caused by: java.io.EOFException: SSL peer shut down incorrectly

Nginx后台报错信息如下:

no host in upstream "", client: 172.17.0.3, server: 0.0.0.0:10443, bytes from/to client:0/0, bytes from/to upstream:0/0

        一开始以为Nginx的配置错误,反复调整后发现,如果在“ map $ssl_preread_server_name ”中配置 default ,则对应的HTTPS接口就能调通,因此可以确定问题出在Java端。安装Haproxy作为代理服务器,在Java后台报同样的错误。问题根源在于项目使用的JDK1.6不支持TLS1.2,做了一个JDK1.8的测试工程,通过代理果然可以顺利调通接口。但是项目JDK的版本不可冒然升级,万幸最后找到第三方的BouncyCastle包可以解决这个问题。在此非常感谢lgs0626的帖子,提供了第三方jar包下载和封装好的TLSSocketConnectionFactory类,直接放到项目里使用就OK了。
       另外,也可以使用Nginx的第三方模块ngx_http_proxy_module,将Nginx作为一个代理服务使用,可以代理任何地址的请求,这样的话需要修改每个HTTP和HTTPS的请求,在代码中添加对应的proxy设置代码,代码改动较多。
本文测试工程下载地址
https://download.csdn.net/download/eastsea/11226668

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值