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?
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
Posso chiederti quali provider hai provato in modo da non provarli? Potrebbe salvarmi un po 'di tempo. – Simon
Principalmente Openshift e Heroku. Anche se ho pensato ad una possibile soluzione, aggiornerò la risposta. – saljuama