командная строка openssl для проверки подписи

Привет, я создал пару ключей и использовал закрытый ключ для создания подписи.

openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig

Однако я не могу проверить подпись с помощью своего открытого ключа:

openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig

Я знаю, что -sigfile устарел. и некоторые онлайн-документы с openssl.org неверны.

Какую команду я должен использовать для проверки подписи с помощью моего открытого ключа?


person c2h2    schedule 28.02.2011    source источник
comment
ваш метод правильный, я пропустил часть дайджеста, пытаясь подписать весь документ! Спасибо за вашу помощь! Я также нашел несколько полезных ссылок, которые я использую для работы с X.509 CA: sandbox.rulemaker.net/ngps/m2/howto.ca.html octaldream.com/~scottm/talks/ssl/opensslca.html   -  person c2h2    schedule 07.03.2011


Ответы (4)


Я нашел два решения вашей проблемы.

Вы можете использовать rsautl таким образом: (с закрытым ключом: my.key и открытым ключом my-pub.pem)

$ openssl rsautl -sign -inkey my.key -out in.txt.rsa -in in.txt
Enter pass phrase for my.key:
$ openssl rsautl -verify -inkey my-pub.pem -in in.txt.rsa -pubin
Bonjour

При использовании этого метода весь документ включается в файл подписи и выводится последней командой.

Но в моем случае мой сертификат говорит: Алгоритм подписи: sha1WithRSAEncryption. Поэтому я бы порекомендовал вам использовать стандартный способ подписи документа в 4 шага: (Этот метод используется для всех асимметричных электронных подписей, чтобы не перегружать файл подписи и/или использование ЦП)

  1. Создать дайджест документа для подписи (отправитель)
  2. Подпишите дайджест закрытым ключом (отправитель)
  3. Создайте дайджест документа для проверки (получателя)
  4. Подтвердить подпись с помощью открытого ключа (получателя)

OpenSSL делает это в два этапа:

$ openssl dgst -sha256 -sign my.key -out in.txt.sha256 in.txt 
Enter pass phrase for my.key:
$ openssl dgst -sha256 -verify my-pub.pem -signature in.txt.sha256 in.txt  
Verified OK

С помощью этого метода вы отправляете получателю два документа: исходный файл обычный текст и файл подписи подписанный дайджест. Внимание: файл подписи не включает весь документ! Только дайджест.

person M'vy    schedule 28.02.2011
comment
При использовании этой самой командной строки для проверки подписи заданных данных я получаю следующий вывод об ошибке: Verification failure\n Error in dgst означает ли это, что проверка не удалась из-за ошибки или из-за того, что файлы не совпадают? - person Badda; 02.06.2017
comment
Нет реальной причины сбоя декодирования подписи, поэтому я бы сказал, что несоответствие. - person M'vy; 02.06.2017
comment
Вы случайно не знаете, важен ли формат подписи? Я думаю, что формат .sign не обрабатывается - person Badda; 02.06.2017
comment
Вы действительно должны смотреть на документацию. Файлы подписи являются текстовыми файлами, расширения не имеют значения. Да формат содержимого файла есть, но не глядя не могу сказать, нормально ли. Сначала протестируйте его с помощью команды, которую я разместил здесь, и случайного текстового файла, он должен работать, а затем проверьте свои собственные файлы. - person M'vy; 02.06.2017

ваш метод в принципе правильный. Что вы пропустите, так это сообщить rsautl, что файл файла ключа inut является открытым ключом, добавив «-pubin». Пункт "-pubin" Документ OpenSSL rsautl не является точным " -pubin входной файл является открытым ключом RSA." должен быть " -pubin входной файл ключа является открытым ключом RSA." Так как входной файл должен быть подписью файл.

person Sheng Yu    schedule 01.03.2012

Подтвердить с помощью открытого ключа

echo "plop" > "helloworld.txt"
openssl rsautl -sign -in hello.txt -inkey private.pem -out sig
openssl rsautl -verify -in sig -inkey public.pem -pubin
> plop
person jessn    schedule 14.09.2016

Вы можете проверить документ для rsautl.

В вашем примере это даст:

openssl rsautl -verify -in sig -inkey aa.pem

Я скопировал свою полную историю ниже:

echo "plop" > "helloworld.txt"
openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
openssl rsautl -verify -in sig -inkey aa.pem
> plop
person vaugham    schedule 28.02.2011
comment
Привет, спасибо, я прочитал руководство, но мне нужно использовать открытый ключ для проверки. не закрытый ключ. - person c2h2; 28.02.2011
comment
используйте -pubin и передайте открытый ключ в качестве аргумента -inkey - person Kyle Butt; 11.08.2015