Сделайте так, чтобы сервер OpenSSL принимал подключения только от клиентов, которые уже имеют открытый сертификат сервера - PullRequest
0 голосов
/ 30 ноября 2018

Я все еще учусь программировать на C ++, используя OpenSSL, и пытаюсь создать приложение, в котором клиент инициирует соединения с сервером.Я

  1. Сгенерировал пару сертификат / ключ с использованием OpenSSL (как .pem)
  2. Вызывается файл SSL_use_certificate_file / PrivateKey_file в инициализации сервера
  3. Сохраните сертификат сервера с помощьюклиент и проверка сертификата на стороне клиента при попытке подключиться к серверу

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

Я хотел бы спросить:

  1. Что-то не так с тем, как я использую сертификат?
  2. Как я могу сделать так, чтобысоединение не будет установлено, если у клиента нет сертификата сервера?

1 Ответ

0 голосов
/ 30 ноября 2018

У вас, похоже, есть недостаток дизайна.

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

Если вы не контролируете клиента, но должны доверять ему,вам нужно использовать клиент сертификатов.Это гораздо реже, но определенно разрешено в протоколе SSL / TLS, лежащем в основе HTTPS.Эффект сертификата клиента обратный: когда сервер обнаруживает сбой с помощью сертификата клиента, сервер может отключиться.

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