Ubuntu 17.10でスマートカードで文字列に署名しようとしています。私にとって必要なのはpkcs7-signedData
オブジェクトです。私はできます。一部次のコマンド署名を使用すると、一部バイナリfoo.sig
ファイル。それは何ですか?これをPKCS#7署名にどのように変更しますか?
$ echo foobar | pkcs11-tool --module ./VdsPKCS1164.so --login --pin $PIN \
--sign --id 5378 --output-file foo.sig
Using slot 0 with a present token (0x1)
Using signature algorithm RSA-PKCS
$ openssl asn1parse -in foo.sig
Error: offset too large
$ openssl asn1parse -inform der -in foo.sig
Error in encoding
139905918145984:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:../crypto/asn1/asn1_lib.c:101:
答え1
広範な研究結果:
pkcs11-tool --sign
このコマンドは、選択されたハッシュアルゴリズムのバイナリ結果を生成します。これはPKCS構造自体ではありませんが、サードパーティのライブラリと一緒に使用してasn1
互換性のあるコンテンツを生成できます。これは退屈で推奨されないプロセスですが、検証可能なpkcs7-signedData
署名を構築できます。
openssl smime -sign
pkcs11
推奨コマンド:同じモジュールを含むエンジンを使用するように構成する必要があり、pkcs11-tool
追加のライブラリーなしでPKCS#7構造を構築できます。
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
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
cert.pem
次のコマンドを使用して、ファイル(および必要に応じて追加の証明書)をトークンカードから抽出してPEMに変換できます。
$ 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