Я пытаюсь проверить подпись пакета на сайте пакета FreeBSD
wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz
Это дает три файла: digests
, digests.pub
digests.sig
я понимаю, что digests.sig
это подпись для файла digests
с digests.pub
как открытым ключом. Но я попытался подтвердить это:
openssl dgst -verify digests.pub -signature digests.sig digests
и получил сообщение
Verification Failure
Я предполагаю, что у меня что-то не так - кто-нибудь может сказать мне, что мне не хватает?
EDIT: на основе охоты через исходный код, я думаю , что важная функция должна быть найдена здесь , называется , rsa_verify_cert_cb
которая вызывает RSA_verify
из библиотеки OpenSSL. Но я не выяснил, что ему подается, и можно ли вызвать эту функцию с помощью openssl
инструментов командной строки.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
, похоже, тоже не подходит.sha256sum digests
Ответы:
Поскольку в Интернете нет инструкции «Как сделать» для ручной проверки пакета FreeBSD, вот что я понял.
Хитрость в том, что октетная строка в
openssl rsautl
выводе на самом деле является хешем строки, которая является хешем SHA256 файла.Например, скачайте current
http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
, распакуйте его и сделайте следующее:Метод 1 (использование одной строки
openssl dgst
)Здесь важно сделать,
tr -d '\n'
чтобы удалить новую строку из стандартного ввода, чтобы она не включалась в строку ввода дляopenssl dgst
.Эта команда должна вывести
Verified OK
.Метод 2 (визуальное сравнение строки октета из файла .sig с хэшем, созданным вручную)
Используйте утилиту OpenSSL для выгрузки содержимого из digests.sig
Здесь вы можете видеть, что внедренный объект - это хеш SHA256, и его значение равно
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.Теперь рассчитайте SHA256 файла
digests
:echo
команды и сравните со значением, возвращаемымopenssl rsautl
:Обратите внимание, что значение из шага 3. совпадает со значением из шага 1., поэтому файл
digests
действителен.источник
В этом сообщении говорится, что открытый ключ не соответствует загруженному вами файлу. Согласно man-странице для dgst -verify filename проверьте подпись, используя открытый ключ в «filename». Вывод: «Подтверждение в порядке» или «Ошибка проверки» . Наиболее вероятная причина - файл поврежден во время загрузки. Я попытался бы загрузить его снова, и если он по-прежнему не проходит проверку, это признак скомпрометированной ссылки на скачивание (но, поскольку она с веб-сайта freebsd, я подозреваю, что это просто ошибка загрузки. Даже тогда я проверю новую скачать просто чтобы быть на безопасной стороне). Если у вас медленное / ненадежное подключение к Интернету, может потребоваться несколько попыток, чтобы загрузить его правильно. Если вам когда-нибудь понадобится проверить информацию о командах
источник