Настройка gpg-подписи для Yandex.Деньги
Нам необходим ключ для подписывания наших запросов. Для работы с PGP используется нативная утилита GnuPG (gpg), установленная в системе, и её хранилище ключей. Вкратце рассмотрим настройку и работу утилиты. Инструкция приведена для версии gpg (GnuPG) 1.4.11 под linux.
Предположим, что работа с gpg только что началась и до этого никаких операций не проводилось. Иначе при необходимости надо скорректировать свои действия, возможно, пропустить некоторые этапы.
Прежде всего нужно сгенерировать свою пару открытый/закрытый ключ:
$gpg --gen-keyПри этом выбирается нужный тип ключа (например, для работы Yandex.Money выбирается "(4) RSA (только для подписи)" ); выбирается длина; выбирается срок действия.
Далее формируется UserID (имя, e-mail, комментарий) в таком виде: "dimon (first key) <dimon@***.ru>". Три параметра вводятся по очереди или сразу, зависит от реализации.
Наконец, вводится пароль для доступа к ключу. Предположим, мы ввели "123456". По этому паролю в некоторых реализациях и в некоторых случаях будет идентифицироваться ключ. В вышеприведённой конфигурации этот пароль указывается в параметре GpgPassPhrase для соответствующей валюты.
После некоторых дополнительных указаний сгенерируются (открытый и закрытый) ключи.
Можно посмотреть на ключ:
$ gpg --list-key/home/dimon/.gnupg/pubring.gpg------------------------------pub 2048R/F99D7F2B 2010-11-08uid dimon (first key) <dimon@***.ru>Аналогично смотрятся секретные ключи:
$ gpg --list-secret-keys/home/dimon/.gnupg/secring.gpg------------------------------sec 2048R/F99D7F2B 2010-11-08uid dimon (first key) <dimon@***.ru>Чтобы отослать свой ключ получателю (в нашем случае менеджерам Yandex.Деньги) его надо экспортировать в файл. Выгрузим в текстовом (не бинарном) виде:
$gpg --export --armor > mykey.ascПолучится файл mykey.asc с вашим ключом:
-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v1.4.11 (GNU/Linux)mQENBEzXmH8BCADJE6LkH9i4+Q96OzuvrSnAK9u9xxmp3x05FtGLswUNn6n0Ux7XeBLGTQn+aT1KG1gc6O8c0l87A1hWk/VIE9ipCIbccY8xa1SWBcjHHtZIxYPG5ToMq4jWuW7WJzgpZV6TuJYrfzz+iX/SQOfn0gav61ZoNCcLQ+Ypzz075r1Ax/S/KfinfiUyjjqDZI1ajfE1jWgXn/nxnWQ7DD5P2FJ4/HBR7HF7EABqo+TLk74hbYISoPWwpAnYPzVn0tlXlhWI6CgIHx8YC9xhBA5LsmZk1SBKZhviSMCFuGCQnFpXFyX8fmfUTCfJTFMDnBFAEPRJKeG5G2/Ahe2IrlwoSXB7ABEBAAG0ImRpbW9uIChmaXJzdCBrZXkpIDxkaW1vbkBiaXRlbC5ydT6JATgEEwECACIFAkzXmH8CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEE3+EBD5nX8rWdcH/2w/VpmlgYOHAphC9zXsTv09K4jNaLV6BwG0XqW1Af3Y49tDYpv9zaobtV/yRd0gaZo2rONTXlb4GGpBsbPBWwkgeYb/z+7AZm0auCEYlc4Fk9J7QN0NvbGccw+I6dRIrykK+VwZUS4+nQB+EIDoR33UzaT47IPqi1HkYiRpxB3B/4axMiTjfx28gdzX3EICQtMNEDczcPCYsYCB9A2y2XBdN4OUWanrceEvUeEhPa4rR/sYpvg3JZv44Asm7du3GprYnlFcoeSdmeJ/Bl/au+eU8gvzDCEVBmUNRyG1cTXgfoJqcFVLULoASwfAYVfJQVRMBP60ecz4wPMxhHvV2Gc==Cgdy-----END PGP PUBLIC KEY BLOCK-----Дальше нужно импортировать выдаваемые второй стороной ключи. Нужный в данный момент имеет имя "Yandex.Money Payment Gate.asc".
$ gpg --import ./Yandex.Money\ Payment\ Gate.ascgpg: ключ B0B2F0D8: открытый ключ "Yandex.Money Demo Payment Center (Yandex.Money Demo Payment Center) <demopaymentcenter@yamoney.ru>" импортированgpg: Всего обработано: 1gpg: импортировано: 1Второй ключ - "Yandex.Money Online Registry Key.asc" - тоже пригодится в последующем.
$ gpg --import ./Yandex.Money\ Online\ Registry\ Key.ascgpg: ключ ACE74CE2: открытый ключ "Yandex.Money Online Registry Key <onreg@yamoney.ru>" импортированgpg: Всего обработано: 1gpg: импортировано: 1Можно убедиться, что теперь открытых ключей стало больше (наш закрытый, конечно, остался один):
$ gpg --list-key/home/dimon/.gnupg/pubring.gpg------------------------------pub 2048R/F99D7F2B 2010-11-08uid dimon (first key) <dimon@***.ru>pub 1024D/B0B2F0D8 2008-05-29uid Yandex.Money Demo Payment Center (Yandex.Money Demo Payment Center) <demopaymentcenter@yamoney.ru>sub 2048g/2A9A05C6 2008-05-29pub 1024D/ACE74CE2 2006-10-05uid Yandex.Money Online Registry Key <onreg@yamoney.ru>sub 2048g/BCD3ACEF 2006-10-05Пример того, как это все работает (вывод на экран в бинарном виде).
Подпись файла test.txt:
$ gpg --armor --output - --sign --passphrase 123456 test.txt-----BEGIN PGP MESSAGE-----Version: GnuPG v1.4.10 (GNU/Linux)owEBPgHB/pANAwACAXzF27f83iK8AawOYgR0ZXN0S6h2SXRlc3SJARwEAAECAAYFAkuodkkACgkQfMXbt/zeIrwE6Qf/bNGgTUytFAuPaInkx49L8DQyUx72Lra9uOinTCfaRPZJlwjt4wdsF0FYYLuFYoQ25WwfVmdZwTwfvd1qV+drWBJKZx/s8t0WDrnw0rQL9JainBkojNdmcGfa3UMEAYLQgXezpGwZtQ4iURjVbChH52lR3NFDGjt+fR8pdVSdjz7owhTldC08ceVSKLDagW+XFYC9OaeWjDvLKN2dsYbeWL1g0VjmzSHHPjFGXL8J90FpTymL/DZZsnOWUxUmEU7ymZ14NAwtOV9jjyGjYL8bGSDymJEqttXKJWbOZlHUbzJG23m2YK1BoW7ojNbAD8ilrIMWyjCa6id+OB29lJXzzA===IhW8-----END PGP MESSAGE-----Подпись и шифрование для отправки сверки на Яндекс:
$ gpg --armor --output - --encrypt -r BCD3ACEF --sign --passphrase 123456 ./test.txtВ данном случае файл будет зашифрован указанным ключём Яндекса и подписан нашим ключом по умолчанию (он устанавливается командой gpg --default-key), либо первым ключом в секретном хранилище.
Могут возникнуть проблемы:
Недоверие ключу:
gpg: BCD3ACEF: Нет свидетельств того, что данный ключ принадлежит пользователю, указанному в User ID ключаи запрос всё время доверять или нет. Надо установить уровень доверия ключу:
$ gpg --edit-key BCD3ACEFИ далее вводится "trust" и выбрать "доверять абсолютно", потом "quit".
Также, как вариант, можно использовать --trust-model always или --always-trust, но не нужно.