JavaEE - EJB over SSL 仅当客户端和服务器位于同一主机时才有效

标签 java jakarta-ee ssl glassfish rsa

请帮帮我。我对此无能为力。我有 gf 4.0.1 和 swing 客户端。我想通过 SSL 获取 EJB。我已经设置了所有证书。但是,只有当客户端和服务器位于同一主机时,我才能让它工作。当它们位于同一主机时,我在 tcpdump 中看到的内容:

........ 
10.0.17.2.48524 > 10.0.17.2.3820: Flags [P.], cksum 0x378f (incorrect -> 0xf2b6), seq 399:756, ack 1085, win 273, options [nop,nop,TS val 347297976 ecr 347297966], length 357
13:01:26.334898 IP (tos 0x0, ttl 64, id 51559, offset 0, flags [DF], proto TCP (6), length 665)
    10.0.17.2.3820 > 10.0.17.2.48524: Flags [P.], cksum 0x388f (incorrect -> 0x626d), seq 1085:1698, ack 756, win 273, options [nop,nop,TS val 347297977 ecr 347297976], length 613
13:01:26.374075 IP (tos 0x0, ttl 64, id 39617, offset 0, flags [DF], proto TCP (6), length 52)
    10.0.17.2.48524 > 10.0.17.2.3820: Flags [.], cksum 0x9282 (correct), seq 756, ack 1698, win 289, options [nop,nop,TS val 347298017 ecr 347297977], length 0
13:01:26.375662 IP (tos 0x0, ttl 64, id 15848, offset 0, flags [DF], proto TCP (6), length 60)
    127.0.0.1.42403 > 127.0.0.1.3820: Flags [S], cksum 0x7255 (correct), seq 2517132554, win 32792, options [mss 16396,sackOK,TS val 347298018 ecr 0,nop,wscale 7], length 0
13:01:26.375678 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
    127.0.0.1.3820 > 127.0.0.1.42403: Flags [S.], cksum 0x21e9 (correct), seq 2013817557, ack 2517132555, win 32768, options [mss 16396,sackOK,TS val 347298018 ecr 347298018,nop,wscale 7], length 0
........

那是它从一个 ip 和端口开始工作,但在某些地方它将 ip 更改为 127.0.0.1 并建立了一个新连接:10.0.17.2.3820 > 10.0.17.2.48524(客户端端口 48524)然后是 127.0 .0.1.3820 > 127.0.0.1.42403(客户端端口 42403)。

当客户端和服务器位于不同主机时,我没有得到任何异常,但客户端挂起。在日志中的服务器上,我有:

[2014-06-09T13:09:07.367+0400] [glassfish 4.0] [INFO] [] [] [tid: _ThreadID=139 _ThreadName=Thread-8] [timeMillis: 1402304947367] [levelValue: 800] [[
  p: thread-pool-1; w: 1, WRITE: TLSv1 Handshake, length = 48]]
[2014-06-09T13:09:07.367+0400] [glassfish 4.0] [INFO] [] [] [tid: _ThreadID=139 _ThreadName=Thread-8] [timeMillis: 1402304947367] [levelValue: 800] [[
  %% Cached server session: [Session-15, TLS_RSA_WITH_AES_256_CBC_SHA]]]
[2014-06-09T13:09:07.404+0400] [glassfish 4.0] [INFO] [] [] [tid: _ThreadID=139 _ThreadName=Thread-8] [timeMillis: 1402304947404] [levelValue: 800] [[
  p: thread-pool-1; w: 1, READ: TLSv1 Application Data, length = 352]]
[2014-06-09T13:09:07.408+0400] [glassfish 4.0] [INFO] [] [] [tid: _ThreadID=139 _ThreadName=Thread-8] [timeMillis: 1402304947408] [levelValue: 800] [[
  p: thread-pool-1; w: 1, WRITE: TLSv1 Application Data, length = 608]]

在客户端我不断收到以下消息(使用不同的密码套件):

.......
Ignoring unavailable cipher suite: TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
Ignoring unavailable cipher suite: TLS_ECDH_RSA_WITH_RC4_128_SHA
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
Ignoring unavailable cipher suite: TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
Ignoring unavailable cipher suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256
.......

如何解决?完整的客户端日志在这里 http://centr-kav.org/temp.txt

最佳答案

我找到了答案。我希望它对某人有用。问题是服务器将客户端重定向到 127.0.0.1。原因是

InetAddress.getLocalHost()

在我的 Linux 机器上返回 127.0.0.1。原因是我没有设置/etc/host.这就是为什么

hostname -i

返回 127.0.0.1

编辑/etc/hosts 后不需要重启服务器,只需要重启 glassfish。同样在 domain.xml 中,我添加了:

<jvm-options>-Dcom.sun.CORBA.ORBServerHost=x.x.x.x</jvm-options>

另见 https://java.net/jira/browse/GLASSFISH-4051

关于JavaEE - EJB over SSL 仅当客户端和服务器位于同一主机时才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24117040/

相关文章:

jakarta-ee - Java EE、JDBC 和 Tomcat

java - Spring 3 依赖注入(inject)

django - 使用 SSL、AWS Load Balancer、Nginx 和 Gunicorn 的具有复杂堆栈的 Django Rest Framework 的错误超链接

java - 从 servlet API 设置时是否需要转义 cookie 值?

java - 来自 smb 的 Camel - 组合 "delete=true"并按文件名过滤

java - 当我重新抛出 SocketException 被 IOException 捕获时,为什么 java 会报错?

c# - SslStream错误: Stream was not writable

java - 打印重音 (UTF-8) Zebra cpcl Java/Android

Java , Android , Java EE

python - pymongo [SSL : CERTIFICATE_VERIFY_FAILED]: certificate has expired on Mongo Atlas