Настройка 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
-
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, но не нужно.