Проверьте файл подписи (PKCS7) с помощью WinCrypt или CNG.

Я исправил свою проблему, отключив preDexLibraries для всех модулей:

dexOptions {
        preDexLibraries true
        ...
1
задан Simpleton 21 January 2019 в 09:48
поделиться

1 ответ

1114 Я не уверен, есть ли у нас вся необходимая информация, поэтому у меня нет однозначных ответов. Тем не менее, давайте посмотрим, сможем ли мы добиться прогресса в направлении решения.

Вы спросили:

Как узнать, какой сертификат и откуда загрузить?

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

Вы также написали:

В OpenSSL есть хорошая команда openssl smime -verify -inform der -in LOCALSIG.DSA -content LOCALSIG.SF -noverify, которая делает именно то, что я хочу.

Вы уверены, что это именно то, что вы хотите сделать? Поскольку вы передаете флаг -noverify, все, что делает эта команда, проверяет, что LOCALSIG.DSA содержит правильную подпись содержимого LOCALSIG.SF. Однако он не подтверждает, что эта подпись была создана удостоверением, которому вы доверяете. Любой человек с действительным сертификатом и парой ключей мог создать эту подпись.

Чтобы проверить подпись, в том числе личность подписавшего, в версии stock-openssl, вам нужна вся цепочка сертификатов, доступная вам в формате, понятном openssl (PEM или DER), вплоть до самого себя. подписанный корневой сертификат. Затем вы можете проверить это с помощью немного другой команды

openssl smime -verify -inform der -in LOCALSIG.DSA -content LOCALSIG.SF -CAfile trusted-cert.pem

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

Первое использование CertEnumCertificatesInStore() [119 ] посмотреть сертификат в хранилище сертификатов. Пример использования см. В . Пример программы C: список сертификатов в хранилище .

Если у вас есть дескриптор этого сертификата, используйте CryptImportPublicKeyInfoEx2() , чтобы получить дескриптор требуемого открытого ключа.

Этот дескриптор типа BCRYPT_KEY_HANDLE вы можете использовать с BCryptVerifySignature() для проверки.

0
ответ дан Reinier Torenbeek 21 January 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: