Após extensa pesquisa:
O comando pkcs11-tool --sign
produz um resultado binário do algoritmo de hashing selecionado que pode ser usado posteriormente (ao lado de uma biblioteca que gera asn1
) em um processo tedioso de construir manualmente uma assinatura pkcs7-signedData
verificável.
openssl smime -sign
pode ser usado com pkcs11
engine (depois de carregar o mesmo módulo usado por pkcs11-tool
) e construir a estrutura PKCS # 7 para você (sem libs adicionais) processando pkcs11-tool
suboptimal para a tarefa .
Exemplo de arquivo de configuração do OpenSSL:
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
dynamic_path = /usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/pkcs11.so
engine_id = pkcs11
MODULE_PATH = ./VdsPKCS1164.so
PIN = 1234
default_algorithms = ALL
init = 1
Comando para gerar o exemplo de assinatura do PKCS # 7:
$ echo foobar > input.data
$ OPENSSL_CONF=./openssl.cnf openssl smime -sign -engine pkcs11 \
-md sha1 -binary -in input.data -out foo.sig -outform der \
-keyform engine -inkey id_5378 -certfile extra.cert.pem -signer cert.pem
O arquivo cert.pem
(e quaisquer certificados extras, se necessário) pode ser extraído do cartão de token e convertido em PEM com:
$ pkcs11-tool --module ./VdsPKCS1164.so --login --pin $PIN \
--read-object --type cert -id 5378 --output-file cert.crt
$ openssl x509 -inform der -in cert.crt -out cert.pem