Вопрос или проблема
Я пытаюсь следовать этому руководству https://p11-glue.github.io/p11-glue/p11-kit/manual/remoting.html, но есть много моментов, которые меня смущают.
- Какая сторона является сервером pkcs11?
Сказано: “Настройка сервера пересылки PKCS#11 на локальном клиенте”.
Так что я понимаю, что моя локальная машина играет роль p11 сервера,
который напрямую подключается к смарт-карте (в дальнейшем я использую
softhsm в качестве смарт-карты).
Они упоминаютP11_KIT_SERVER_ADDRESS
, но команда выполняется на “локальном клиенте”, что вызывает путаницу.
- Какая сторона является клиентом pkcs11?
В разделе “Подготовка удаленной системы к пересылке сокета PKCS#11”. “Пересылка сокета PKCS#11”, они находят директорию выполнения пользователя, но одна из них выполняется через “ssh”. Поэтому я подумал, что
директория выполнения
находится на удаленной системе. (Они также используют терминыудаленный сервер
илиудаленный хост
)
Как описано ниже, я опишу шаг за шагом то, что я сделал в 2 контейнерах, A – в качестве моей локальной машины, и B – в качестве удаленного хоста. Я использую softhsm в качестве смоделированной смарт-карты.
На локальной машине A:
$ p11tool --list-tokens
Token 0:
URL: pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=System%20Trust
Label: System Trust
Type: Trust module
Flags: uPIN uninitialized
Manufacturer: PKCS#11 Kit
Model: p11-kit-trust
Serial: 1
Module: p11-kit-trust.so
Token 1:
URL: pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=d1472478b9829554;token=mimi
Label: mimi
Type: Generic token
Flags: RNG, Requires login
Manufacturer: SoftHSM project
Model: SoftHSM v2
Serial: d1472478b9829554
Module: /usr/local/lib/softhsm/libsofthsm2.so
Итак, на машине A доступно 2 токена.
Мне также нужно создать директорию выполнения на локальном хосте. В противном случае при выполнении p11-kit server --provider ...
возникает ошибка.
export XDG_RUNTIME_DIR=/tmp/$(id -u)-today
mkdir -p $XDG_RUNTIME_DIR
chmod 700 $XDG_RUNTIME_DIR
p11-kit server --provider /usr/local/lib/softhsm/libsofthsm2.so "pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=01165599c52ea1fe;token=mimi"
P11_KIT_SERVER_ADDRESS=unix:path=/tmp/0-today/p11-kit/pkcs11-73; export P11_KIT_SERVER_ADDRESS;
P11_KIT_SERVER_PID=74; export P11_KIT_SERVER_PID;
На удаленном хосте – B (172.18.0.3):
root@1de661b77dbd:~# export XDG_RUNTIME_DIR=/tmp/$(id -u)-nginx
root@1de661b77dbd:~# mkdir -p $XDG_RUNTIME_DIR && chmod 700 $XDG_RUNTIME_DIR
root@1de661b77dbd:~# systemd-path user-runtime
/tmp/0-nginx
root@1de661b77dbd:~# systemctl enable p11-kit-client.service
Ошибка: не удалось включить юнит, юнит p11-kit-client.service не существует.
root@1de661b77dbd:~# systemctl list-unit-files | grep p11
p11-kit-client.service enabled enabled
root@1de661b77dbd:~# mkdir /tmp/0-nginx/p11-kit
Я пытался подключиться по ssh с A к машине B с помощью ssh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} [email protected]
, но получил предупреждение, поэтому мне нужно было создать /tmp/0-nginx/p11-kit
на B, после чего предупреждение исчезло.
С/с Машины A
root@b1d0c05c4ec6:~# ssh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} [email protected]
и затем
root@1de661b77dbd:~# ls -l /tmp/0-nginx/p11-kit/pkcs11
srw------- 1 root root 0 Oct 17 10:56 /tmp/0-nginx/p11-kit/pkcs11
p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-client.so --list-tokens
p11tool --provider /usr/local/lib/pkcs11/p11-kit-client.so --list-tokens
=> Ни один токен не отображается с p11-kit-client.so
на удаленной машине.
Я допустил ошибку на каком-либо из этапов? Почему ни один токен не отображается на удаленной машине при использовании p11-kit-client.so?
Ответ или решение
Понимание PKCS#11 Подключения: Разъяснение Клиента и Сервера
Интеграция PKCS#11 через подключение может быть сложной задачей, особенно когда речь идет о различии между клиентом и сервером. Давайте разберем ваш вопрос, чтобы прояснить эти моменты, опираясь на ваш сценарий работы с p11-kit
.
Как определить сервер PKCS#11?
Из вашего описания следует, что ваш "локальный компьютер" (машина A) играет роль сервера PKCS#11. В данном контексте под "сервером" подразумевается устройство, которое непосредственно взаимодействует с токеном (например, смарт-картой, эмулируемой с помощью SoftHSM). Для успешного выполнения этого действия необходимо запустить серверный процесс p11-kit server
, обеспечивая доступ к соответствующему провайдеру PKCS#11 на локальной машине.
Пример шагов для настройки:
-
Создайте необходимый исполняемый контекст:
export XDG_RUNTIME_DIR=/tmp/$(id -u)-today mkdir -p $XDG_RUNTIME_DIR && chmod 700 $XDG_RUNTIME_DIR
-
Запустите сервер:
p11-kit server --provider /usr/local/lib/softhsm/libsofthsm2.so "pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=...;token=mimi"
В результате выполнения этих действий ваш локальный компьютер A станет сервером PKCS#11, который управляет доступом к токенам.
Как определить клиента PKCS#11?
Клиент PKCS#11 определяется как машина или процесс, который запрашивает доступ к серверу PKCS#11. В вашем сценарии это "удаленный хост" (машина B). Когда вы выполняете команду SSH с параметром -R
, вы создаете обратное подключение, позволяющее удаленному хосту взаимодействовать с локальным сервером PKCS#11 на машине A.
Порядок выполнения:
- Если вы, например, хотите перенаправить сокет на удаленный хост:
ssh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} user@[remote_host]
Здесь /tmp/0-nginx/p11-kit/pkcs11
на машине B будет служить клиентским интерфейсом для доступа к токену на машине A.
Проблемы с отображением токенов на удаленной машине
При выполнении команды p11tool
на машине B вы не видите токены, так как, возможно, не правильно настроено подключение или не установлен нужный провайдер. Основные моменты, которые стоит проверить:
-
Проверьте, запущен ли сервер:
Убедитесь, что вы запустили сервер p11-kit на локальной машине A и он работает, как ожидалось. -
Проверьте пользовательские права:
Убедитесь, что у вас есть все необходимые права доступа для создания и использования сокета в папке/tmp/0-nginx/p11-kit/
на удаленном хосте B. -
Настройте клиентский провайдер:
Убедитесь, что плагинp11-kit-client.so
доступен и правильно настроен на удаленной машине. Попробуйте следующий пример команды:p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-client.so --list-tokens
-
Проверьте все шаги подключения SSH:
Убедитесь, что команда SSH прошла успешно и сокеты правильно ссылаются друг на друга.
Заключение
Подходя к вопросу определения ролей клиента и сервера PKCS#11, ваш локальный компьютер A является сервером, а удаленный хост B выступает в роли клиента, который подключается к этому серверу для доступа к его токенам. Пройдите все предложенные шаги по отладке и проверьте конфигурации еще раз, чтобы устранить возникшие проблемы с отображением токенов на удаленной машине.