Командная строка 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 не так.
Какую команду я должен использовать для проверки подписи с моим открытым ключом?
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 этапа: (Этот метод используется для всех асимметричных электронных подписей, чтобы не перегружать файл подписи и / или использование ЦП)
- Создать дайджест документа для подписи (отправитель)
- Подпишите дайджест с закрытым ключом (отправитель)
- Создать дайджест документа для проверки (получатель)
- Проверить подпись с открытым ключом (получатель)
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
С помощью этого метода вы отправили получателю два документа: исходный файл обычного текста, файл подписи, подписанный дайджест. Внимание: файл подписи не включает в себя весь документ! Только дайджест.
Подтвердите, используя открытый ключ
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
Ваш метод в основном правильный. Что вы упускаете, так это сообщаете rsautl, что файл файла инут-ключа является открытым ключом, добавив "-pubin". Элемент "-pubin" Документ OpenSSL rsautl не точен "-pubin во входном файле является открытым ключом RSA." Должен быть "-pubin во входном файле ключей является открытым ключом RSA." Поскольку входной файл должен быть подписью файл.
Вы можете проверить документ для 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