Достаточно ли использования сертификата CA для безопасного взаимодействия с SSLServerSocket? - PullRequest
2 голосов
/ 11 июля 2019

У меня есть серверное приложение Java SSL, и я могу связаться с его клиентом, используя самозаверяющий сертификат и пару ключей.Это делается на моей машине для разработки.

Теперь пришло время запустить приложение на работающем сервере, и я получил свой сертификат SSL от органа (LE).

Я могуэкспортируйте подписанный сертификат и импортируйте его в хранилище ключей Bouncy Castle для моего клиента Android.Тем не менее, одна вещь заставила меня задуматься.Если срок действия сертификата истекает, это означает, что мне придется каждый раз обновлять приложение.Я не хочу этого делать, и это похоже на слишком большую работу.

Я читал эту страницу , и они упомянули (Раздел Ключи для SSL , номер позиции 3 ), что для установления соединения достаточно простого наличия сертификата CA.

[Необязательно] Экспортируйте сертификат открытого ключа вашего личного ключа и распространите егона стороны SSL, которые будут взаимодействовать с вами.(см. раздел «Экспорт сертификата открытого ключа из хранилища ключей»). Если вы используете сертификат из центра сертификации, другим будет достаточно иметь только сертификат самого центра сертификации.

Я хотел знать, насколько это безопасно и каковы последствия (если таковые имеются).

Идея состоит в том, чтобы не перекомпилировать клиентское приложение при каждом обновлении сертификата.

Спасибо.

1 Ответ

1 голос
/ 11 июля 2019

Из того, что я понял, только ваш клиент аутентифицирует ваш сервер, а не наоборот. Это односторонняя аутентификация, поскольку только одна из двух сторон аутентифицирует другую. Я могу ошибаться, и вы можете делать взаимную аутентификацию, но мы вернемся к этому. Сначала давайте рассмотрим более простой случай.

Чтобы ваш клиент мог аутентифицировать ваш сервер, серверу требуется сертификат SSL с закрытым ключом, который, как вам кажется, у вас есть. Этот сертификат был подписан сертификатом CA, который, вероятно, был подписан корневым сертификатом. Чтобы клиент доверял вашему серверу, ему необходим список сертификатов CA, которым клиент доверяет подписать SSL-сертификат. Этот список сертификатов является вашим хранилищем доверия. Ваше доверенное хранилище должно иметь корень и сертификат CA для доверенного CA.

Если срок действия SSL-сертификата вашего сервера истекает, вам необходимо получить новый сертификат для вашего сервера. Если ваш новый сертификат был подписан тем же центром сертификации, который подписал ваш старый сертификат, клиент продолжит доверять вашему серверу без каких-либо обновлений. Однако, если ваш новый сертификат был подписан ЦС, который неизвестен вашему клиенту (т. Е. Сертификат ЦС отсутствует в хранилище доверенных сертификатов), вам необходимо обновить доверенное хранилище клиента с помощью СА и корневых сертификатов нового сертификата.

Это описывает одностороннюю аутентификацию. Однако, если ваше приложение требует взаимной аутентификации, в дополнение к тому, что ваш клиент аутентифицирует ваш сервер, ваш сервер также должен будет аутентифицировать вашего клиента. Процесс точно такой же, но в обратном порядке. Клиенту также понадобится ssl-сертификат, а серверу также потребуется хранилище доверенных сертификатов с сертификатами Root / CA, которые подписали сертификат клиента. Применяются те же правила, что и при проверке подлинности сервера клиентом. Таким образом, если срок действия ssl-сертификата клиента истекает, а новый сертификат не известен хранилищу доверенных сертификатов сервера, хранилище доверенных сертификатов должно быть обновлено новым сертификатом CA.

Один из способов обойти ручное обновление хранилища доверенных сертификатов - автоматически получать новые хранилища доверенных сертификатов с доверенными центрами сертификации. Это то, что делает ваш браузер. Однако вам все равно потребуется обновить приложение, если потребуется новый сертификат.

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