2012-06-14 3 views
1

Я пытаюсь выполнить основное упражнение по подписанию и проверке подписи с использованием OpenSSL. Подписание работает нормальноПодписание и проверка с помощью OpenSSL

$ openssl pkeyutl -hexdump -sign -inkey id_rsa -in test.txt > test.sig 
Enter pass phrase for id_rsa: 
$ cat test.sig 
0000 - 20 ab 34 00 ff 87 50 1e-de fb c9 3d 10 2f 7b fd .4...P....=./{. 
0010 - 99 a1 61 e0 3d 5f 93 82-63 e9 0a 6f 1a 22 4f 04 ..a.=_..c..o."O. 
etc... 

Однако, когда я пытаюсь проверить эту подпись, я получаю сообщение об ошибке.

$ openssl pkeyutl -verify -pubin -inkey id_rsa.pub.pem -signature test.sig test.txt 
unable to load Public Key 

Открытый ключ, который я пытаюсь использовать это переделанный открытый ключ SSH в формате PEM:

-----BEGIN RSA PUBLIC KEY----- 
MIICCAKCAf8wxsGr3b/rR/BsRqRMBaKPEGATYhSNaqnThcx9YdA7jHcj1dK7Utmo 
nXZz7WwB0W1vzADZpzX96UUX5OIn1iByZ3ZQZpkO6YApMYxo/oHyiBYiCyEhbqKR 
TydzmXFGYJ6UtLBFLD1eKfJokhiqdRa1kVMdAd6nBT5JiNb0ADO3VisyPwQZpqyB 
Izbq1643JT2PC1BYk1cqqxyTnY/kAEEQvcQwrd0y7p29slRHC6g77HToWJLzNdAj 
b2rjkRIfMzDx0LwmCuEqh+9XfVYQFJyrqXTrcgQlKBQhTSneSnn/9SpqYs4ziOIR 
4djO9BbhGb/09LSb31NFy6S99rXsElI2aSaaGz5y6/6wyYq+zMxmiS//iCV/heNv 
i3PH+D2hxOdz+VEvAJ77x4cMOn3ovVW73aWoBsNP8c9ISKt6MSXClljskA1WFcYJ 
9UuBicQ/FGL2j96lzQ2NZZrYru0gAOkj3WUF/z5ORGC7iRvgOc89oqUxKNG+N/RN 
jrMbCBAN8hOlJCW0e7/MoangYtBtZ52ZSIxYACRRfKTUlKdjsE9UVYrqBtTeVDGp 
Igb+0kuBD61XF6IpnHEX0OZeArL7FY1trDJ85lUU09qNbnlnxNAY2Qo3cZiXSRBW 
ROBUxz0OzF2Gvj30BEiY1rshH+XtM5ViQo1nK+YkBQcrCbwfnCFBAgMBAAE= 
-----END RSA PUBLIC KEY----- 

генерируется с помощью команды

ssh-keygen -f key.pub -e -m pem 

На основе обсуждений и документации что я прочитал об этой проблеме, что должен работы. Но это не так.

Любые подсказки?


EDIT: Я просто попытался тот же процесс, с парой ключей, генерируемых с помощью OpenSSL, а не преобразованных ключей SSH. Это просто терпит неудачу, а не создает ошибку (openssl дает мне информацию об использовании, а не проверку подписи).

EDIT 2: Использование двоичной сигнатуры (опуская -hexdump) оказывает такое же влияние на ключи, сгенерированные с помощью OpenSSL. На преобразованных ключей RSA, я получаю

unable to load Public Key 
Error initializing context 
[snip usage output] 
+0

Что реализация/версия OpenSSL вы используете? –

+0

@notfed - Извините, должен был упомянуть. openssl 1.0.1c-3, прямо из [Debian Wheezy repos] (http://packages.debian.org/wheezy/openssl). – Inaimathi

+1

Кажется, что вы выводите hexdump подписи в файл и используете это для проверки.Я сомневаюсь, что openssl ожидает, что он прочитает hexdump, а не двоичную подпись. Не могли бы вы попытаться удалить параметр «-xxdump» при создании подписи. –

ответ

1

Вы дали несуществующее вариант -signature. Правильно - -sigfile. Следующие работы:

$ openssl pkeyutl -sign -inkey key.pem -in data.txt > test.sig 
$ openssl pkeyutl -verify -pubin -inkey pubkey.pem -sigfile test.sig -in data.txt 
Signature Verified Successfully 
0

-hexdump опция Я думаю, используется, потому что вы не хотите, чтобы получить двоичный файл из? Вы можете использовать base64 для кодирования двоичного сиговых в ASCII:

openssl pkeyutl -sign -inkey id_rsa -in test.txt | base64 > test.sig 

Однако, когда вы проверить это, вы будете иметь, чтобы преобразовать его обратно в двоичный файл, в какой-то временный файл:

cat test.sig | base64 -d > ~test.sig.bin 

Ваш открытый ключевой файл находится в формате «rsa public key», вы можете видеть в строке заголовка «BEGIN RSA PUBLIC KEY». Вы можете преобразовать это в не-RSA с открытым ключом формат, который будет иметь заголовок 'BEGIN PUBLIC KEY':

openssl rsa -in id_rsa.pub.pem -RSAPublicKey > id.pub.pem 

Наконец, с помощью ПОМ открытого ключа ", и двоичный sigfile, вы можете проверить:

openssl pkeyutl -verify -pubin -inkey id.pub.pem -sigfile ~test.sig.bin -in test.txt 

Выход:

Signature Verified Successfully 

 Смежные вопросы

  • Нет связанных вопросов^_^