/ / SocketException alla chiamata al servizio web https [duplicato] - java, servizi Web, tomcat, ssl, soap

SocketException alla chiamata al servizio web https [duplicato] - java, servizi Web, tomcat, ssl, soap

Sto ricevendo a intermittenza l'errore qui sotto quando chiami un servizio web di soap post via https, ho già importato il certificato del webservice nel mio cacert, qualsiasi idea di cosa stia causando questo?

Caused by: java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:911)

risposte:

1 per risposta № 1

Questo di solito significa che c'era una reteerrore, come un timeout TCP. Vorrei iniziare posizionando uno sniffer (wirehark) sulla connessione per vedere se è possibile vedere eventuali problemi. Se c'è un errore TCP, dovresti essere in grado di vederlo. Inoltre, è possibile controllare i log del router, se questo è applicabile. Se il wireless è coinvolto ovunque, questa è un'altra fonte per questo tipo di errori.

Primo collegamento

Secondo link


0 per risposta № 2

Ho appreso che il problema riguardava la sicurezza di primavera, la generazione di nonce e deve essere codificato come Base64

Si noti che String, "nonceStr" non è codificatocome Base64. Ma quando lo metti in ByteBuffer, "buf", lo hai decodificato come Base64. Ciò causerà a intermittenza un problema a seconda che l'UUID generato sia conforme a Base64.

String nonceStr = UUID.create();
System.out.println("nonceStr: "+nonceStr);
byte[] a = Base64.decodeBase64(nonceStr.getBytes());
System.out.println("nonceStr: "+Base64.encodeBase64String(a));


String base64NonceStr = new String(Base64.encodeBase64(nonceStr.getBytes()));
System.out.println("base64NonceStr: "+base64NonceStr);
byte[] b = Base64.decodeBase64(base64NonceStr.getBytes());
System.out.println("base64NonceStr: "+Base64.encodeBase64String(b));

nonceStr: ac1c6f1cc80f4cbde9f753bfd5f0fa
nonceStr: ac1c6f1cc80f4cbde9f753bfd5f0fQ==
base64NonceStr: YWMxYzZmMWNjODBmNGNiZGU5Zjc1M2JmZDVmMGZh
base64NonceStr: YWMxYzZmMWNjODBmNGNiZGU5Zjc1M2JmZDVmMGZh

nonceStr: ac1c6f1c2da679b7dea1384b81fb2431
nonceStr: ac1c6f1c2da679b7dea1384b81fb2431
base64NonceStr: YWMxYzZmMWMyZGE2NzliN2RlYTEzODRiODFmYjI0MzE=
base64NonceStr: YWMxYzZmMWMyZGE2NzliN2RlYTEzODRiODFmYjI0MzE=

nonceStr: ac1c6f1cc80f4cbdea17677b796ad8
nonceStr: ac1c6f1cc80f4cbdea17677b796adw==
base64NonceStr: YWMxYzZmMWNjODBmNGNiZGVhMTc2NzdiNzk2YWQ4
base64NonceStr: YWMxYzZmMWNjODBmNGNiZGVhMTc2NzdiNzk2YWQ4

2 run su 3 generati nonceStr con problema basato sul codice corrente. La modifica più semplice da correggere è semplicemente Base64 codificare il tuo nonceStr generato, invece di

String nonceStr = UUID.create();

cambiarlo in

String nonceStr = new String(Base64.encodeBase64(UUID.create().getBytes()));