Это мое понимание SSL, я не специалист в данной области, но, при отсутствии других ответов, надеюсь, я, по крайней мере, могу дать вам несколько вещей для размышлений.
Когда вы создаете самозаверяющий сертификат для сервера, вам нужно каким-то образом добавить его к клиенту, он не будет установлен сразу после подключения клиента, иначе любой сервер может просто стать доверенным, отправив самозаверяющий сертификат на все, что пытается подключиться к нему. В моем приложении сертификат сервера загружается в склад доверенных сертификатов клиента при его запуске, указав javax.net.ssl.truststore ("путь / к / серверу / сертификат");
Теперь, когда клиент подключается к серверу, происходит рукопожатие. В этот момент сервер отправит свой сертификат клиенту, и клиент подтвердит, что он фактически пришел с сервера, проверив его в своем хранилище доверенных сертификатов (в данный момент не имеет значения, является ли он самоподписанным или нет, потому что клиент должен проверить корневые сертификаты, а также любые добавленные вами). Если сертификат, отправленный сервером, проверяет связь, связь продолжается и данные передаются.
Существует некоторая форма сеанса сеанса, позволяющая установить связь без необходимости каждый раз обмениваться сертификатами. Но я считаю, что это ограничивается одним соединением, поэтому, как только вы закроете соединение и создадите новое, процесс должен быть повторен, т. Е. Сервер должен снова отправить свой сертификат для проверки.
Итак, подведем итог: самоподписанный сертификат сервера должен быть установлен на клиенте с помощью связи SSL (например, как сертификаты корневого ЦС устанавливаются в продукте с самого начала).
Каждое SSL-соединение, устанавливаемое между клиентом и сервером, требует, чтобы сервер отправлял свой сертификат клиенту, чтобы он мог проверить его в своем хранилище доверенных сертификатов.
Возможно, что сервер разрешит возобновление сеансов, и в этом случае сертификат не будет повторно отправлен (но я не уверен, при каких условиях сеанс может быть возобновлен, возможно, это настраивается на разных серверах).
Надеюсь, это хотя бы даст вам возможность подумать.