Нам необходим ключ для подписывания наших запросов. Для работы с 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-08 uid dimon (first key) <dimon@***.ru>
Аналогично смотрятся секретные ключи:
$ gpg --list-secret-keys /home/dimon/.gnupg/secring.gpg ------------------------------ sec 2048R/F99D7F2B 2010-11-08 uid 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+Q96OzuvrSnAK9u9xxmp3x05FtGLswUNn6n0Ux7X eBLGTQn+aT1KG1gc6O8c0l87A1hWk/VIE9ipCIbccY8xa1SWBcjHHtZIxYPG5ToM q4jWuW7WJzgpZV6TuJYrfzz+iX/SQOfn0gav61ZoNCcLQ+Ypzz075r1Ax/S/Kfin fiUyjjqDZI1ajfE1jWgXn/nxnWQ7DD5P2FJ4/HBR7HF7EABqo+TLk74hbYISoPWw pAnYPzVn0tlXlhWI6CgIHx8YC9xhBA5LsmZk1SBKZhviSMCFuGCQnFpXFyX8fmfU TCfJTFMDnBFAEPRJKeG5G2/Ahe2IrlwoSXB7ABEBAAG0ImRpbW9uIChmaXJzdCBr ZXkpIDxkaW1vbkBiaXRlbC5ydT6JATgEEwECACIFAkzXmH8CGwMGCwkIBwMCBhUI AgkKCwQWAgMBAh4BAheAAAoJEE3+EBD5nX8rWdcH/2w/VpmlgYOHAphC9zXsTv09 K4jNaLV6BwG0XqW1Af3Y49tDYpv9zaobtV/yRd0gaZo2rONTXlb4GGpBsbPBWwkg eYb/z+7AZm0auCEYlc4Fk9J7QN0NvbGccw+I6dRIrykK+VwZUS4+nQB+EIDoR33U zaT47IPqi1HkYiRpxB3B/4axMiTjfx28gdzX3EICQtMNEDczcPCYsYCB9A2y2XBd N4OUWanrceEvUeEhPa4rR/sYpvg3JZv44Asm7du3GprYnlFcoeSdmeJ/Bl/au+eU 8gvzDCEVBmUNRyG1cTXgfoJqcFVLULoASwfAYVfJQVRMBP60ecz4wPMxhHvV2Gc= =Cgdy -----END PGP PUBLIC KEY BLOCK-----
Дальше нужно импортировать выдаваемые второй стороной ключи. Нужный в данный момент имеет имя "Yandex.Money Payment Gate.asc".
$ gpg --import ./Yandex.Money\ Payment\ Gate.asc gpg: ключ B0B2F0D8: открытый ключ "Yandex.Money Demo Payment Center (Yandex.Money Demo Payment Center) <demopaymentcenter@yamoney.ru>" импортирован gpg: Всего обработано: 1 gpg: импортировано: 1
Второй ключ - "Yandex.Money Online Registry Key.asc" - тоже пригодится в последующем.
$ gpg --import ./Yandex.Money\ Online\ Registry\ Key.asc gpg: ключ ACE74CE2: открытый ключ "Yandex.Money Online Registry Key <onreg@yamoney.ru>" импортирован gpg: Всего обработано: 1 gpg: импортировано: 1
Можно убедиться, что теперь открытых ключей стало больше (наш закрытый, конечно, остался один):
$ gpg --list-key /home/dimon/.gnupg/pubring.gpg ------------------------------ pub 2048R/F99D7F2B 2010-11-08 uid dimon (first key) <dimon@***.ru> pub 1024D/B0B2F0D8 2008-05-29 uid Yandex.Money Demo Payment Center (Yandex.Money Demo Payment Center) <demopaymentcenter@yamoney.ru> sub 2048g/2A9A05C6 2008-05-29 pub 1024D/ACE74CE2 2006-10-05 uid 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/pANAwACAXzF27f83iK8AawOYgR0ZXN0S6h2SXRlc3SJARwEAAECAAYF AkuodkkACgkQfMXbt/zeIrwE6Qf/bNGgTUytFAuPaInkx49L8DQyUx72Lra9uOin TCfaRPZJlwjt4wdsF0FYYLuFYoQ25WwfVmdZwTwfvd1qV+drWBJKZx/s8t0WDrnw 0rQL9JainBkojNdmcGfa3UMEAYLQgXezpGwZtQ4iURjVbChH52lR3NFDGjt+fR8p dVSdjz7owhTldC08ceVSKLDagW+XFYC9OaeWjDvLKN2dsYbeWL1g0VjmzSHHPjFG XL8J90FpTymL/DZZsnOWUxUmEU7ymZ14NAwtOV9jjyGjYL8bGSDymJEqttXKJWbO ZlHUbzJG23m2YK1BoW7ojNbAD8ilrIMWyjCa6id+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, но не нужно.