PKCS#11 Пересылка: Разъяснение путаницы между клиентом и сервером

Вопрос или проблема

Я пытаюсь следовать этому руководству 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 Forwarding: Разъяснение путаницы между клиентом и сервером

Вопрос, который вы поднимаете, касается важной концепции PKCS#11 — стандарта для криптографических токенов, таких как умные карты. Давайте подробно рассмотрим, что подразумевается под клиентом и сервером в этом контексте, а также проанализируем шаги, которые вы предприняли, и причину, по которой токены не отображаются на удаленном хосте.

Определения: клиент и сервер PKCS#11

  1. PKCS#11 сервер: В контексте вашего вопроса, ваш локальный компьютер (машина A) фактически выступает в роли сервера PKCS#11. Это связано с тем, что именно на локальной машине вы запускаете p11-kit сервер, который взаимодействует с вашим смарт-картой (или в данном случае с эмуляцией смарт-карты через SoftHSM).

  2. PKCS#11 клиент: Под клиентом PKCS#11 понимается удалённый хост (машина B), который, в свою очередь, отправляет запросы к серверу PKCS#11 (вашей локальной машине) для доступа к токенам через установленный канал связи (в данном случае через SSH).

Шаги и идентификация проблем

Вы выполнили следующие шаги, чтобы настроить системную связь между вашим локальным сервером и удалённым клиентом. Давайте проанализируем их:

  1. Настройка локального сервера (машина A):

    • Вы правильно создали окружение для сервера p11-kit, установили адрес P11_KIT_SERVER_ADDRESS и запустили сервер. Это настраивает взаимодействие с вашим смарт-картой SoftHSM.
  2. Настройка удаленного клиента (машина B):

    • Вы корректно создали директорию XDG_RUNTIME_DIR и подгрузили услуги системы, чтобы они могли работать с вашими запросами.
    • Описание использования SSH для создания удалённого канала действительно указывает, что на удалённом хосте должна быть доступна директория, куда будет перенаправлен сокет.

Проблема с отображением токенов

Отсутствие токенов при выполнении команды p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-client.so --list-tokens на удалённом хосте означает, что у клиента нет доступа к информации о токенах на сервере. Возможные причины:

  1. Проблемы с доступом через сокет: Убедитесь, что сокет действительно создан и доступен на удаленной машине. Вы можете попробовать выполнить команду ls -l /tmp/0-nginx/p11-kit/pkcs11 и убедиться, что параметры сокета выполнены корректно (доступ и права на сокет могут вызвать проблемы).

  2. Не корректная настройка p11-kit-client: Убедитесь, что на удаленной машине установлен правильный клиент p11-kit и что он может видеть и взаимодействовать с установленным сервером. Попробуйте запустить сервер и клиент в режиме отладки для получения дополнительных логов, чтобы выяснить, происходит ли какое-либо взаимодействие.

  3. Правильность переправки адреса сокета: При запуске SSH запустите, например, команду ssh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} <user>@<remote-host>. Убедитесь, что переменная P11_KIT_SERVER_ADDRESS правильно передается и что сервер, который вы указали, записан в правильном формате.

Заключение

Ваша настройка PKCS#11 forwarding требует внимательного подхода из-за потенциальных источников путаницы между клиентом и сервером. Убедитесь, что все шаги выполнены последовательно и корректно. Проверьте доступы и корректные версии использования p11-kit как на клиенте, так и на сервере. Если проблема остается, попробуйте задействовать дополнительные инструменты для диагностики соединений и прав доступа.

Дополнительным методом диагностики может стать использование различных отладочных опций, поддерживаемых pkcs11 и плагинами p11-kit для большей прозрачности в работе с токенами.

Оцените материал
Добавить комментарий

Капча загружается...