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