Estou tentando seguir este tutorial https://p11-glue.github.io/p11-glue/p11-kit/manual/remoting.html , mas há muitos pontos que me deixam confuso.
- De que lado está o servidor pkcs11?
Ele disse "Configurando o servidor de encaminhamento PKCS#11 em um cliente local". Então eu entendo que minha máquina local desempenha um papel como servidor p11, onde se conecta diretamente com o smart-card (na configuração posterior eu uso softhsm como um smart card). Eles mencionam o
P11_KIT_SERVER_ADDRESS
, mas o comando é executado no "cliente local", o que é confuso.
- De que lado está o cliente pkcs11?
Na sessão "Preparando o sistema remoto para encaminhamento de socket PKCS#11". "Encaminhando o socket PKCS#11", eles localizam o diretório de tempo de execução do usuário, mas um deles é feito por "ssh". Então eu pensei que
runtime directory
estava no sistema remoto. (Eles também usam o termoremote server
orremote host
)
Conforme abaixo, descrevo o passo a passo que fiz em 2 contêineres, A - como minha máquina local, e B - como um host remoto. Eu uso softhsm para um smart card estimulado. Na máquina local 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
Então, há 2 tokens disponíveis na máquina A. Eu também preciso criar um diretório de tempo de execução no host local. Caso contrário, ele mostra erro quando eu faço issop11-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;
No host remoto - 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
Failed to enable unit, unit p11-kit-client.service does not exist.
root@1de661b77dbd:~# systemctl list-unit-files | grep p11
p11-kit-client.service enabled enabled
root@1de661b77dbd:~# mkdir /tmp/0-nginx/p11-kit
Eu tentei fazer ssh de A para a máquina B, mas recebi o aviso, então precisei criar em B, então o aviso acabou. Na/da máquina Assh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} [email protected]
/tmp/0-nginx/p11-kit
root@b1d0c05c4ec6:~# ssh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} [email protected]
and then
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
=> Nenhum token aparece p11-kit-client.so
na máquina remota.
Cometi um erro em algum dos passos? Por que nenhum token aparece na máquina remota ao usar p11-kit-client.so?
Semelhante ao X11 ou ssh-agent, o host que contém os recursos (tokens reais neste caso) é o servidor, e o host que quer usar os recursos é o cliente que se conecta ao servidor. Então, se você estiver fazendo isso com SSH e tentando encaminhar tokens locais para o sistema remoto, então o host local é o cliente SSH e o servidor p11-kit, enquanto o host remoto seria o servidor SSH e o cliente p11-kit (como cliente ssh-agent se você estivesse usando
-A
).Sua saída mostra que você não configurou
P11_KIT_SERVER_ADDRESS
na máquina B após conectar (nemXDG_RUNTIME_DIR
, embora esse seja apenas um mecanismo secundário). O sshd do servidor tem um soquete, mas não sabe nada sobre ele ser um soquete p11-kit, enquanto o p11-kit no servidor não tem ideia de que precisa procurar lá.Sua saída anterior diz que você tem
export XDG_RUNTIME_DIR=/tmp/$(id -u)-nginx
, mas aparentemente isso foi feito em uma sessão SSH completamente diferente. Variáveis de ambiente não são automaticamente para todo o usuário, elas são por processo e não persistem se você reconectar a sessão SSH.O soquete do servidor p11-kit não precisa necessariamente estar em $XDG_RUNTIME_DIR; mas esse é o caminho padrão usado pela
p11-kit-server.service
unidade systemd para usuários de desktop. (Observe que este é um serviço de nível de usuário , gerenciado por uma instância separada "systemd --user".) No lado do cliente, um caminho personalizado pode ser especificado usando a--name
opção; e no lado do servidor, esse é o propósito deP11_KIT_SERVER_ADDRESS
(que substitui o padrão integrado deunix:path=$XDG_RUNTIME_DIR/p11-kit/pkcs11
).