Я понимаю поток подтверждения ssl, но у меня возникла логическая проблема. Когда пользователь выбирает сертификат, мне нужно проверить его на соответствие приложению, чтобы знать, что он надежен и соответствует любому пользователю системы. Но если нет, я должен разрешить пользователю снова попросить выбрать другой. Возможно, на компьютере пользователя установлено несколько сертификатов, и он по ошибке выбрал неправильный сертификат.
В моем фактическом сценарии, чтобы выбрать другой сертификат, пользователь должен закрыть браузер и снова открыть его, но это отрицательно влияет на пользователя, и я хочу его улучшить.
Решение выполняет рукопожатие для каждого запроса, поэтому позволяет пользователю выбрать другой.
Но как это сделать?
Самый актуальный вопрос, который я нашел, был https://security.stackexchange.com/questions/56623/avoiding-ssl-handshake-for-each-call.
- В полное рукопожатие это то, что делают клиент и сервер, когда они не знают друг друга (ранее они не разговаривали или это было давно). При полном рукопожатии сертификаты отправляются, и происходит асимметричная криптография (RSA, Diffie-Hellman ...).
- В сокращенное рукопожатие то, что клиент и сервер помнят друг друга; более точно, они запоминают алгоритмы и ключи, которые они установили в предыдущем полном рукопожатии, и соглашаются повторно использовать их (технически они повторно используют «главный секрет» и получают из него новые ключи шифрования для этого соединения).
Я могу освободить любой файл cookie, закрыть вкладку и отключить сохранение активности, второе рукопожатие не открывает запрос сертификата. Он использует предыдущее выбранное, а для Chrome, например, нет опции «запомнить мое решение», как у Firefox. То же самое происходит с Edge, Opera, Edge и т.д. Это стандарт?
Я предполагаю, что им можно управлять на стороне сервера, запрашивая новое рукопожатие SSL. Я попытался решить эту проблему самостоятельно, но безуспешно
на стороне клиента:
на стороне сервера:
Закрытие браузера - единственное эффективное средство для нового SSL-рукопожатия, но оно ухудшит взаимодействие с пользователем.
Что ж, если я очищаю все данные в браузере, закрываю подключения, удаляю все живые, и он все еще использует 1-й сертификат, выбранный по второму запросу, пока я не закрою браузер (убью весь процесс), что-то не так, или с помощью браузера (всего) или с сервера.
Если мое приложение использует SSL для аутентификации пользователей, я не могу использовать несколько логинов без закрытия браузера, это неправильно, у него должен быть способ повторно согласовать эту аутентификацию.
Это соответствует тому же поведению HTTP Basic Auth, так что браузеры запоминают эти учетные данные на время сеанса браузера и не предоставляют возможности их забыть.