Как добавить несколько источников доверия на сервер

Мой вопрос несколько связан с этим вопросом в Stackoverflow. Однако мой сервер будет прослушивать один порт. Сервер будет доверять клиенту только в том случае, если он найдет у себя сертификат открытого ключа клиента. Я хочу, чтобы клиент отправлял имя, если его сертификат открытого ключа (при обычном небезопасном соединении), который сервер будет искать в своей собственной файловой системе. Если сервер находит сертификат, он преобразует старое небезопасное клиентское соединение в соединение SSL. Это вообще возможно? Если да, то как?


person TheRookierLearner    schedule 26.04.2013    source источник


Ответы (2)


Вы, кажется, не понимаете, как на самом деле работает SSL. Если вы настроите его так, что требуется аутентификация клиента, клиент отправит свой сертификат во время рукопожатия, а сервер сможет получить его и проверить любым удобным для него способом. В Java это означает установку HandshakeCompletedListener на сервере или использование SSLSocket.getSession.getPeerCertificate()..

person user207421    schedule 26.04.2013
comment
Да, я должен признать, что я не совсем понимаю его. Однако будет ли неправильно, если я скажу, что серверу необходимо связаться с ЦС для проверки личности клиента (или, другими словами, сервер должен иметь доступ к открытому ключу, поддерживаемому ЦС)? - person TheRookierLearner; 26.04.2013
comment
Кроме того, было бы очень полезно, если бы вы указали некоторые ресурсы для понимания теории, стоящей за этим, а также некоторые ресурсы по программированию. - person TheRookierLearner; 26.04.2013
comment
Я предложил один в вашей другой теме. - person user207421; 26.04.2013
comment
Я, Справочное руководство JSSE и ссылка IBM. Полагаю, для них нет книг. - person TheRookierLearner; 26.04.2013
comment
Серверу не нужно связываться с ЦС. На сервере уже есть цепочка клиентских сертификатов, и пока его хранилище доверенных сертификатов доверяет одному из подписывающих лиц в цепочке, идентификация устанавливается. Вам также необходимо прочитать PKI сертификата X.509. - person user207421; 27.04.2013

Вы можете сделать это, выполнив POST запрос поверх обычного HTTP отправив на сервер имя сертификата клиента.
В ответе может быть результат, указывающий клиенту повторно подключиться к серверу через SSL через другой порт.
Использование одного порта для HTTP и HTTPS, как вы ожидаете, невозможно и не имеет смысла.
Ваше требование в целом не имеет смысла, ИМХО.

person Cratylus    schedule 26.04.2013