2015-12-11 15 views
7

Ho un'app java Spring Boot che utilizza un certificato autofirmato per comunicare con il front-end Android.Heroku: applicazione Spring Boot Gradle con server https tomcat e pinning certificato

utilizzare un server Tomcat come il mio contenitore per l'applicazione:

compile 'org.springframework.boot:spring-boot-starter-tomcat' 

Ora, ho permesso HTTPS/SSL:

  TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container; 
      tomcat.addConnectorCustomizers(connector -> { 
       connector.setPort(Integer.parseInt(serverPort)); 
       connector.setSecure(true); 
       connector.setScheme("https"); 

devo abilitare SSL come io voglio che il mio frontend Android per comunicare al mio server in modo sicuro. Io uso la tecnica chiamata pinning del certificato che significa che aggiungo lo stesso certificato autofirmato sia al mio server che alla mia app per Android. Per qualsiasi comunicazione http tra i due, la comunicazione verrà crittografata con i tasti dello stesso certificato e quindi l'applicazione per server e Android sarà in grado di capirsi l'un l'altro.

Quando carico in Heroku, ottengo gli errori ogni volta che provo a chiamare il server:

2015-12-11T20:04:32.424629+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/getfood?postid=566348364a918a12046ce96f" host=app.herokuapp.com request_id=bf975c13-69f3-45f5-9e04-ca6817b6c410 fwd="197.89.172.181" dyno=web.1 connect=0ms service=4ms status=503 bytes=0 

Secondo questo blog da Julie: http://juliekrueger.com/blog/

Come nota a margine, Heroku le app sono https abilitate per impostazione predefinita. Il server I era installato se Tomcat era configurato per l'utilizzo di https e tentando di accedere a un endpoint restituiva un codice = H13 desc = "Connessione chiusa senza risposta". Dopo aver rimosso tale configurazione, l'errore si è interrotto.

Posso correggere l'errore semplicemente rimuovendo ssl/https dal mio server tomcat, ma come ho detto, voglio usare la tecnica di pinning del certificato per comunicazioni sicure.

Stavo pensando se fosse possibile disabilitare SSL su heroku ma mantenere attivo il mio server Tomcat SSL ma ho già contattato Heroku e mi hanno detto che non è possibile disattivare il Piggyback SSL fornito in dotazione con il loro servizio.

Ho anche guardato l'alternativa a pagamento qui chiamata Endpoint SSL ma sembra solo userful per domini personalizzati. Poiché tutti gli endpoint sono codificati nella mia app Android e non sono visibili all'utente, non ha senso utilizzare un dominio personalizzato. Inoltre, non penso che risolverà il mio problema poiché il suo unico obiettivo sembra essere quello di creare il dominio personalizzato:

L'endpoint SSL è utile solo per domini personalizzati. Tutti i domini appname predefiniti.herokuapp.com sono già abilitati per SSL e possono essere aperti a utilizzando https, ad esempio https://appname.herokuapp.com.

Ho cercato su Google per alcuni giorni e non riesco a trovare una soluzione. Disabilitare ssl sul mio lato tomcat non sarebbe accettabile nella mia mente in quanto pone troppi rischi. Prenderò in considerazione anche altri servizi (Azure, ecc.) Se questo risolva il mio problema.

Qualche idea su come posso risolvere questo?

risposta

3

Con Heroku, per utilizzare il proprio SSL personalizzato, è necessario utilizzare un dominio personalizzato e l'addon Endpoint SSL, probabilmente non avrà senso per il tuo caso, ma è l'unico modo per utilizzare il tuo proprio certificato

E non ho provato tutti i provider disponibili, ma con quelli che ho provato, lo scenario è esattamente lo stesso, è possibile utilizzare il certificato SSL personalizzato solo se si utilizza un dominio personalizzato.

Sebbene, sfogliando un po 'google, ha trovato questo blog post dove illustra come utilizzare un servizio DNS intermedio per comunicare con Heroku. Nella comunicazione tra il servizio DNS e Heroku, viene utilizzato il cert SSL heroku fornito, ma dal client al servizio DNS viene utilizzato un certificato diverso, quindi potrebbe essere di aiuto.

Aggiornamento: Una possibile soluzione potrebbe essere quella di utilizzare Amazon Web Services, in cui l'affare è di noleggiare VM e si è permesso di configurare il proprio ambiente, il che significa che è possibile installare il proprio gatto e utilizzare il proprio personalizzato SSL.

Update 2: Inoltre v'è CloudFront con AWS, dove è possibile utilizzare i propri certificati explained here

+0

Questo è un po 'fastidioso come i siti di hosting dovrebbe solo fornire una piattaforma semplice per eseguire applicazioni Tomcat incorporato senza nulla in più . Aggiungendo su ssl piggyback stanno creando effettivamente più problemi per i loro consumatori. Potrei finire per dover pagare 20 dollari per ospitare il mio cs SSL su addon SSL Endpoint ora quando sarebbe potuto essere gratis facendo in modo che il mio tomcat incorporato facesse tutto il lavoro. – Simon

+0

Posso chiederti quali provider hai provato in modo da non provarli? Potrebbe salvarmi un po 'di tempo. – Simon

+0

Principalmente Openshift e Heroku. Anche se ho pensato ad una possibile soluzione, aggiornerò la risposta. – saljuama

Problemi correlati