Подтвердить цифровую подпись с самозаверяющим сертификатом - PullRequest
1 голос
/ 25 июня 2011

У меня есть вопрос, касающийся проверки цифровых подписей с использованием самозаверяющего сертификата:

Для меня работает следующий учебник: http://www.oracle.com/technetwork/articles/javase/dig-signature-api-140772.html

Однако, когда сертификат X.509самоподписанный, как получатель может доверять данным сертификата, прикрепленным к сообщению XML?Любой может создать самоподписанный сертификат и заявить, что он один и тот же отправитель.Проверка в приведенном выше руководстве всегда возвращает true.Сертификат отправителя должен быть загружен в хранилище доверенных сертификатов получателя, чтобы получатель мог использовать все, что находится в хранилище доверенных сертификатов, для проверки подписанного документа.Я не могу найти ссылку на такой сценарий.

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

Ваше понимание верно - с самозаверяющими сертификатами любой может создать сертификат, и проверка подписи будет в порядке. Причина заключается в том, что проверка подписи в первую очередь выполняет криптографическую операцию, которая успешно завершена. Второй шаг - проверка самого сертификата, а также его происхождения. При использовании подписанного СА сертификата, сертификат проверяется с использованием сертификатов СА до доверенного СА (или известного корневого СА). С самоподписанным сертификатом проверка невозможна. В вышеприведенном руководстве процедура проверки сертификата была пропущена для простоты, поскольку она довольно сложна и выходит за рамки руководства.

1 голос
/ 26 июня 2011

Проблема, которую вы описываете, обычно решается Инфраструктурами открытых ключей (PKI) .

Это традиционная модель для проверки сертификатов для сайтов HTTPS, например.Он начинается с набора доверенных центров сертификации (CA), из которого вы импортируете сертификаты CA как «доверенные».Полученные вами сертификаты объекта затем проверяются по этому набору доверенных якорей путем создания пути сертификации между сертификатом для проверки и известным вам сертификатом CA (связывая сертификат с доверенным издателем, возможно, через промежуточные сертификаты CA).

Различные правила для этого описаны в RFC 5280 .Система PKI применяется не только к веб-серверам, но и к любому объекту (для веб-серверов существуют дополнительные правила, подтверждающие, что они являются теми, с которыми вы хотите общаться, помимо наличия действующего сертификата).

(В частности, из-за того, что выбор сертификатов CA для доверия часто делается от имени пользователя, по крайней мере по умолчанию, поставщиком ОС или браузера, эта модель не идеальна, но она наиболее распространена в использовании.)

Кроме того, нет ничего плохого в том, чтобы составить список самозаверяющих сертификатов, которым вы могли бы доверять заранее.

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

Эта модель PKI идет рука об руку с форматом X.509 благодаря понятию Issuer DN и Тема DN .У вас могут быть другие модели, например, основанные на сертификатах PGP, где вы создадите сеть доверия;вам все равно понадобится начальный набор доверенных якорей.

Для XML-DSig в Java вам следует реализовать X509KeySelector, который возвращает только ключ, которому вы доверяете.В простом сценарии, когда у вас есть предварительно определенный набор самозаверяющих сертификатов, которым вы доверяете, вы можете перебирать хранилище ключей, содержащее эти доверенные сертификаты.В противном случае используйте Java PKI Programmer Guide (как указано в руководстве, которое вы использовали).

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