异常:GlassFish 5 不能与某些带有SSL证书的服务器进行通信 (SSL/TLS握手问题)

1.搭建环境 

    1) Eclipse Jee Pthoton

    2) GlassFish 5.0

    3) JDK8u201

2.场景

在GlassFish服务器上发布一个网页,用户通过键入地名来获取相关的邮编。 后台接收地名并调用政府服务器的一个api来返回邮编。

3.SSL Client 代码

新建一个SSL Client, 调用api并取回JSON字符串:

String city = xxx;
String StrUri = "https://geo.api.gouv.fr/communes?nom="+city;

ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);

URI serviceUri = UriBuilder.fromUri(StrUri).build();
WebTarget webTarget = client.target(serviceUri);

String jsonString = webTarget.request().accept(MediaType.APPLICATION_JSON).get(String.class);

4.SSL handshake 

api(https://geo.api.gouv.fr/communes?xxxxx)的前缀为https,所以这个政府的服务器带有SSL/TLS证书, 也就是说它使用传输层安全性协议进行SSL/TLS通信。

在SSL client 与SSL server通信之前,它们需要建立安全验证,这就叫SSL/TLS基本握手(SSL/TLS handshake)。

 

其中Client要验证Server发来的证书的有效性,是怎么做的呢?

首先,Client是在GlassFish上建立的,它会查看在GlassFish里的存放证书的文件,根据其官方文档(安全手册 p26) 的说明,GlassFish有两个存放证书的文件:

  • cacerts.jks 包含着被GlassFish信任的CA (root 或 intermediate) 的证书,包括它们的公钥
  • keystore.jks 包含着GlassFish自己的一些证书,包括私钥

其次,根据政府服务器发来的证书,Client 会检测此证书的CA信息,然后与cacerts.jks的对应CA信息对比,以检验刚发来的证书是否有效。

 

接下来我们打开网页,输入地名,然后调用api返回邮编,结果出现了些问题。

5.问题一

 javax.ws.rs.ProcessingException: sun.security.ssl.SSLSessionImpl.<init> 

javax.ws.rs.ProcessingExcepti
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值