请帮帮我。我对此无能为力。我有 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>
关于JavaEE - EJB over SSL 仅当客户端和服务器位于同一主机时才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24117040/