簡體   English   中英

如何使用openssl或任何其他具有智能卡簽名的庫創建PKCS7 signedData結構?

[英]how to create PKCS7 signedData structure with openssl or any other library with signing on smart card?

我需要創建PKCS7 signedData結構,並在智能卡上執行簽名。 這幾乎是openssl函數PKCS7_sign所做的,除了簽名。 也許有人可以為這個問題提出一些建議,即如何使用openssl或任何其他c / c ++跨平台庫來做這件事。 至於openssl,PKCS7_sign函數的標志PKCS7_PARTIAL或PKCS7_STREAM似乎是有用的。 如果我使用任何這個標志,我可以獲得幾乎完整的PKCS7結構。 在這種情況下,結構是完整的,除了它不包含“數據”和“符號”。 所以我只需要添加這些元素。 但我沒有找到如何做到這一點的方式。 有人知道嗎?

您通常不希望(或技術上阻止)從智能卡中提取私鑰。 因為這是智能卡的一個重點 - 加密內存和連接CPU的防篡改位,永遠不會泄露您的私鑰。

所以你需要很好地問芯片卡為你做簽名。

OpenSSL可以做到這一點 - 但需要知道如何與芯片卡通信。 這通常用'引擎'完成。 最常見的是#15的pkcs#11用於此 - 與供應商芯片卡(讀卡器)驅動程序一起使用。

然后,您通常需要獲取插槽和密鑰標識符:

# Extracting slot, auth ids and key id's for later use/reference
#
set `pkcs11-tool --module /usr/lib/opensc-pkcs11.so --list-slots | grep Slot | grep SCM`
SLOT=$2
set `pkcs15-tool --list-keys | grep ID`
AID=$4
KID=$7

之后你可以在卡片上做“事情”:

/usr/bin/openssl << EOM
engine dynamic -pre SO_PATH:/Library/OpenSC/lib/engines/engine_pkcs11.so  -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
XXX -engine pkcs11 -b-key slot_$SLOT-id_$KID -keyform engine  ....
EOM

其中一件事就是簽署pkcs7。 從代碼 - 幾乎做同樣的事情。 我通常使用openssl它的應用程序目錄中的app / util方便stuf來使實時更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM