1114 Я не уверен, есть ли у нас вся необходимая информация, поэтому у меня нет однозначных ответов. Тем не менее, давайте посмотрим, сможем ли мы добиться прогресса в направлении решения.
Вы спросили:
Как узнать, какой сертификат и откуда загрузить?
blockquote>Вы, как проверяющий, должны иметь этот доверенный сертификат в своем распоряжении. в какой-то форме. С Windows было бы хорошо, если бы этот сертификат был установлен в вашем хранилище сертификатов. Это то, что я предположил в своем ответе. Если вы не знаете, где находится сертификат, вам придется сначала выяснить это, в противном случае вы не сможете должным образом проверить подпись. Таким образом, подписчик должен предоставить сертификат верификатору (вам), по доверенному каналу.
Вы также написали:
В OpenSSL есть хорошая команда
blockquote>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()
для проверки.
На PostgreSQL 8.3 на Win32 профильный плагин установлен по умолчанию, но не загружен. Просто выполните этот SQL:
LOAD '$libdir/plugins/plugin_profiler.dll';
SET plpgsql.profiler_tablename = 'bazzybar';
... и затем когда Вы хотите представить некоторый код,
drop table if exists bazzybar; -- reset the profiling stats
select my_function_here('lala',123); -- this line and variations as many times as you deem fit
select * from bazzybar; -- show the time spent on each line of your function