{"id":636,"date":"2020-09-20T12:42:38","date_gmt":"2020-09-20T10:42:38","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=636"},"modified":"2020-09-20T12:42:41","modified_gmt":"2020-09-20T10:42:41","slug":"spring-boot-configurare-proxy-e-certificati-per-servizi-soap","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/09\/spring-boot-configurare-proxy-e-certificati-per-servizi-soap\/","title":{"rendered":"SPRING-BOOT &#8211; CONFIGURARE PROXY  e CERTIFICATI PER SERVIZI SOAP"},"content":{"rendered":"\n<p>Spring ws \u00e8 un pacchetto messo a disposizione da Spring per gestire agevolmente la comunicazione tra servizi SOAP.  La libreria consente di configurare agevolmente un server soap che riceve chiamate nel rispetto di uno schema definito dall&#8217;utente. Per maggiori informazioni rimando all&#8217;ottimo tutorial realizzato dai ragazzi di spring e che trovate <a href=\"https:\/\/spring.io\/guides\/gs\/producing-web-service\/\" title=\"esporre un web service\">qui<\/a><\/p>\n\n\n\n<p>Inoltre la libreria consente di configurare agevolmente un client per poter invocare dei servizi esposti su un altro server e sulla configurazione base rimando sempre al tutorial di spring che trovate qui.<\/p>\n\n\n\n<p>In questo articolo approfondiamo come configurare il client che gira all&#8217;interno di una rete con proxy e che richiede lo scambio dei certificati con il server su cui sono esposti i servizi soa.<\/p>\n\n\n\n<p>Il nostro client si trova in una rete con 2 livelli di sicurezza: un proxy che regola il traffico verso l&#8217;esterno della nostra rete e un server che accetta chiamate crittografate con un certificato associato.<\/p>\n\n\n\n<p>Per fare questo dobbiamo configurare il messagesender presente nella classe WebServiceTemplate con una istanza della classe <a href=\"eclipse-javadoc:%E2%98%82=contrp.be-springboot-trunk\/C:%5C\/Users%5C\/Valerio%5C\/.m2%5C\/repository%5C\/org%5C\/springframework%5C\/ws%5C\/spring-ws-core%5C\/3.0.8.RELEASE%5C\/spring-ws-core-3.0.8.RELEASE.jar%3Corg\">org<\/a>.<a href=\"eclipse-javadoc:%E2%98%82=contrp.be-springboot-trunk\/C:%5C\/Users%5C\/Valerio%5C\/.m2%5C\/repository%5C\/org%5C\/springframework%5C\/ws%5C\/spring-ws-core%5C\/3.0.8.RELEASE%5C\/spring-ws-core-3.0.8.RELEASE.jar%3Corg.springframework\">springframework<\/a>.<a href=\"eclipse-javadoc:%E2%98%82=contrp.be-springboot-trunk\/C:%5C\/Users%5C\/Valerio%5C\/.m2%5C\/repository%5C\/org%5C\/springframework%5C\/ws%5C\/spring-ws-core%5C\/3.0.8.RELEASE%5C\/spring-ws-core-3.0.8.RELEASE.jar%3Corg.springframework.ws\">ws<\/a>.<a href=\"eclipse-javadoc:%E2%98%82=contrp.be-springboot-trunk\/C:%5C\/Users%5C\/Valerio%5C\/.m2%5C\/repository%5C\/org%5C\/springframework%5C\/ws%5C\/spring-ws-core%5C\/3.0.8.RELEASE%5C\/spring-ws-core-3.0.8.RELEASE.jar%3Corg.springframework.ws.transport\">transport<\/a>.<a href=\"eclipse-javadoc:%E2%98%82=contrp.be-springboot-trunk\/C:%5C\/Users%5C\/Valerio%5C\/.m2%5C\/repository%5C\/org%5C\/springframework%5C\/ws%5C\/spring-ws-core%5C\/3.0.8.RELEASE%5C\/spring-ws-core-3.0.8.RELEASE.jar%3Corg.springframework.ws.transport.http\">http<\/a>.HttpComponentsMessageSender che utilizza la classe Apache HttpClient per l&#8217;invio di Post.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">        HttpComponentsMessageSender httpComponentsMessageSender = httpComponentsMessageSender();\n        httpComponentsMessageSender.setHttpClient(httpClient());\n\t\tclient.setMessageSender(httpComponentsMessageSender);<\/pre>\n\n\n\n<p>Nella classe client sto settando  il message sender tramite un metodo seguente in configuro i tempi di timeout e a questo passo il client httoClient dove effettivamente configuro il proxy e il certificato<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Bean\npublic HttpComponentsMessageSender httpComponentsMessageSender() {     \n    HttpComponentsMessageSender sender = new HttpComponentsMessageSender();\n    sender.setReadTimeout(3000);\n    sender.setConnectionTimeout(3000);\n    return sender;\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Bean\n\tpublic HttpClient httpClient() throws Exception {     \n\t\t\n\t\tKeyStore ks = KeyStore.getInstance(\"JKS\");\n        ks.load(keyStore.getInputStream(), keyStorePassword.toCharArray());\n        try {\n            keyStore.getInputStream().close();\n        } catch (IOException e) {\n        \te.printStackTrace();\n        }\n        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());\n        keyManagerFactory.init(ks, keyStorePassword.toCharArray());\n\n        KeyStore ts = KeyStore.getInstance(\"JKS\");\n        ts.load(trustStore.getInputStream(), trustStorePassword.toCharArray());\n        try {\n            trustStore.getInputStream().close();\n        } catch(IOException e) {\n        \te.printStackTrace();\n        }\n        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());\n        trustManagerFactory.init(ts);\n        \n        SSLContext sslContext = SSLContexts.custom()\n        \t\t.loadKeyMaterial(ks, keyStorePassword.toCharArray())\n        \t\t.loadTrustMaterial(ts, null)\n        \t\t.build();\n        SSLConnectionSocketFactory sslsf = new \n                SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);\n        HttpClientBuilder clientBuilder = HttpClients.custom().setSSLSocketFactory(sslsf).\n        \t\taddInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor());\n       \tHttpHost proxy = new HttpHost(proxyHost, proxyPort);\n       \tclientBuilder.setProxy(proxy);\n         HttpClient httpClient = clientBuilder.build();\n        \n        return httpClient;\n\n\t}<\/pre>\n\n\n\n<p>Definisco il contesto SSL fornendo il keystore e il truststore. Definisco il proxy fornendo host e porta e infine creo il client usando la classe HttpClientBuilder.<\/p>\n\n\n\n<p>Alla prossima<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring ws \u00e8 un pacchetto messo a disposizione da Spring per gestire agevolmente la comunicazione tra servizi SOAP. La libreria consente di configurare agevolmente un server soap che riceve chiamate nel rispetto di uno schema definito dall&#8217;utente. Per maggiori informazioni rimando all&#8217;ottimo tutorial realizzato dai ragazzi di spring e che trovate qui Inoltre la libreria &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/09\/spring-boot-configurare-proxy-e-certificati-per-servizi-soap\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">SPRING-BOOT &#8211; CONFIGURARE PROXY  e CERTIFICATI PER SERVIZI SOAP<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[97],"tags":[142,140,138,141],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/636"}],"collection":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/comments?post=636"}],"version-history":[{"count":1,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/636\/revisions"}],"predecessor-version":[{"id":637,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/636\/revisions\/637"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=636"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}