SSL HandShake на клиенте Java

У меня есть очень простое сомнение в SSL HandShake. Предположите, что у нас есть сервер S, который использует сам подписанные сертификаты. Я пишу клиенту Java C, который соединяется с S. Когда подключения C к S, C получает сертификаты от S и сохраняет их к его базе доверенных сертификатов и остающейся части коммуникационных доходов. Через какое-то время я использую тот же C для соединения с S, так будет S отправлять сертификаты снова C, или C будет использовать сертификаты, уже сохраненные в базе доверенных сертификатов. Я не хорош на SSL и конкретной реализации функциональности Базы доверенных сертификатов в Java.

S отправит сертификаты постоянной величине C того, имеет ли C сертификаты на своей базе доверенных сертификатов?? Я полагаю, что, если у меня есть сертификаты в трестах базы доверенных сертификатов C, S и C не попросит сертификаты, когда я соединюсь снова?? Действительно ли мое предположение является правильным??

Процесс - то же для самоподписанных сертификатов и сертификатов CA??

Заранее спасибо.

5
задан JKV 23 April 2010 в 13:21
поделиться

1 ответ

Это мое понимание SSL, я не эксперт по теме, но в отсутствие других ответов, надеюсь, я смогу дать вам кое-что для размышления.

Когда вы создаете самоподписанный сертификат для сервера, вам нужно каким-то образом добавить его к клиенту, он не будет установлен, как только клиент подключается, иначе любой сервер мог бы просто стать доверенным, отправив самоподписанный сертификат на все, что пытается к нему подключиться. В моем приложении сертификат сервера загружается в хранилище доверенных сертификатов клиента при его запуске путем указания javax.net.ssl.truststore ("путь / к / серверу / сертификату");

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

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

Итак, в итоге: самозаверяющий сертификат сервера должен быть установлен на клиенте вне связи SSL (например, как корневые сертификаты CA устанавливаются в продукте с самого начала). Каждое SSL-соединение между клиент и сервер потребуют, чтобы сервер отправил свой сертификат клиенту, чтобы он мог проверить его по своему хранилищу доверенных сертификатов.

Возможно, что сервер разрешит возобновление сеансов, и в этом случае сертификат не будет повторно отправлен (но я не уверен, при каких условиях можно возобновить сеанс, возможно, это можно настроить на разных серверах).

Надеюсь, это хотя бы заставит вас задуматься.

6
ответ дан 14 December 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: