Склад доверенных сертификатов Firebase и настройка Spring для приема сертификатов от Firebase - PullRequest
0 голосов
/ 01 мая 2019

У меня Angular PWA, размещенный в Firebase, и у меня есть служба загрузки Spring, с которой я пытаюсь установить связь (работает в данный момент локально).

Firebase из доброго сердца автоматически создаетSSL-сертификат для размещенного приложения, поэтому он защищен и доступен только через HTTPS.

Что я не могу понять, так это как настроить службу загрузки Spring для приема / доверия / разрешения этих соединений, чтобы PWA мог, например, выполнять базовые вызовы REST (мне даже нужно это делать?).

Моей первой мыслью было добавить сертификат из Firebase в хранилище доверенных сертификатов Spring, но либо я делаю это неправильно, либо это неправильный подход, поскольку я просто получаю javax.net.ssl.SSLHandshakeException: no cipher suites in common со всем, что имеюпробовал.

Команды, которые я выполнил для этого, следующие:

Загрузить сертификат с URL-адреса приложения Angular

keytool -printcert -sslserver app.example.com:443 -rfc > temp.cert

Создать доверенное хранилище из этого сертификата

keytool -keystore truststore.jks -alias example.com -import -file temp.cert

Тогда я просто загружаю это в мой загрузочный файл Spring application.yml

server:
  port: 8443
  ssl:
    key-store: classpath:truststore.jks
    key-password: secret
    key-alias: example.com

Я не совсем уверен, сделал ли я это полностью неправильно или пропустилжизненно важный шаг.

1 Ответ

1 голос
/ 01 мая 2019

Этот подход, к сожалению, не будет работать, но может и не потребоваться.

Как вы, вероятно, знаете, SSL работает с "криптографией с открытым ключом", для которой требуется два ключа: закрытый ключ и открытый ключ . SSL-сертификат - это, в основном, открытый ключ плюс некоторая другая информация для проверки.

Хотя мы можем извлечь SSL-сертификат , используя keytool, как вы сделали, это не даст нам ключевой закрытый ключ . А по соображениям безопасности, скорее всего, нет способа экспортировать закрытый ключ из Firebase.

Так что же можно сделать?

  1. Если вы проводите локальное тестирование, либо просто используйте обычный HTTP (без защиты, но вам также ничего не нужно делать), либо используйте самозаверяющий сертификат . При использовании самоподписанного сертификата вам, вероятно, также потребуется добавить самоподписанный сертификат в ваш браузер .

  2. Если у вас есть доменное имя для службы Spring Boot, вы можете получить бесплатный SSL-сертификат для этого домена в Let's Encrypt и настроить его для Spring Boot .

Кроме того, я заметил, что вы пытались создать truststore вместо keystore. truststore на самом деле для чего-то другого (то, что мы называем client-взаимно-аутентичный ) - вероятно, не то, что вам понадобится. См. эту предыдущую тему для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...