У меня есть Java-приложение Spring Boot, которое использует самозаверяющий сертификат для связи с интерфейсом Android.
Я использую сервер tomcat в качестве своего контейнера для приложения:
compile 'org.springframework.boot:spring-boot-starter-tomcat'
Теперь я включил https/ssl:
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.addConnectorCustomizers(connector -> {
connector.setPort(Integer.parseInt(serverPort));
connector.setSecure(true);
connector.setScheme("https");
Я должен включить SSL, так как я хочу, чтобы мой интерфейс Android безопасно связывался с моим сервером. Я использую метод, называемый закреплением сертификата, что означает, что я добавляю один и тот же самозаверяющий сертификат как на свой сервер, так и в свое приложение для Android. Для любого HTTP-соединения между ними соединение будет зашифровано с помощью ключей одного и того же сертификата, и, следовательно, сервер и приложение Android смогут понимать друг друга.
Когда я загружаю его в Heroku, я получаю ошибки каждый раз, когда пытаюсь вызвать сервер:
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
Согласно этому блогу Джули: http://juliekrueger.com/blog/
Кстати, в приложениях Heroku по умолчанию включен протокол https. На сервере, который я устанавливал, Tomcat был настроен на использование https, и попытка доступа к конечной точке возвращала ошибку code=H13 desc="Connectionclosed Without response". После того, как я удалил эту конфигурацию, ошибка исчезла.
Я могу исправить ошибку, просто удалив ssl/https с моего сервера tomcat, но, как я уже упоминал, я хочу использовать метод закрепления сертификата для безопасной связи.
Я думал, можно ли отключить SSL на стороне heroku, но оставить SSL моего сервера tomcat активным, но я уже связался с Heroku, и они сказали мне, что отключение дополнительного SSL, которое входит в стандартную комплектацию их службы, невозможно.
Я также рассмотрел здесь платную альтернативу под названием SSL Endpoint, но она кажется полезной только для пользовательских доменов. Поскольку все конечные точки закодированы в моем приложении для Android и не видны пользователю, для меня нет смысла использовать собственный домен. Кроме того, я не думаю, что это решит мою проблему, поскольку его единственная цель, по-видимому, заключается в создании пользовательского домена:
Конечная точка SSL полезна только для пользовательских доменов. Все домены appname.herokuapp.com по умолчанию уже поддерживают SSL и могут быть доступны по https, например, https://appname.herokuapp.com.
Я гуглил в течение нескольких дней и не могу найти решение. Отключение ssl на моей стороне tomcat было бы неприемлемо, на мой взгляд, поскольку это создает слишком много рисков. Я бы даже рассмотрел другие сервисы (Azure и т. д.), если бы это решило мою проблему.
Любые идеи о том, как я могу это решить?