智能卡选择数字签名

时间:2015-12-03 16:51:48

标签: javascript pdf digital-signature

我正在维护一个VB6 Windows应用程序,该应用程序通过启动位于Acrobat 9.0的Javascripts子文件夹中的JS文件对PDF文档进行数字签名。现在,我的客户希望将另一个智能卡读卡器插入托管该应用程序的PC,并使用自己的智能卡,其中包含与将签署某类文档的第二人相关的证书。

我的问题是:如何从我的JavaScript代码中以编程方式选择我想要的智能卡读卡器? 在我的JavaScript代码中,我执行以下操作:

    //Initialize the signature handler
    var myEngine = security.getHandler("Adobe.PPKLite");

    //Obtain the available certificates
    var ids = myEngine.digitalIDs;
    var myCerts = ids.certs;

    //Find the certificate I want to use to sign
    for(var j=0; j<myCerts.length; j++)
    {
        if(myCerts[j].subjectCN == "SMITH JOHN")
        {
            oCert = myCerts[j];
            break;
        }
    }

    //Log to the signature engine by passing the certificate I want to use 
    //and the slot where the corresponding smart card reader is plugged
    myEngine.login( { oParams: { cDIPath: ACROSDK.sigDigitalIDPath,
            cPassword: ACROSDK.sigUserPwd,
            iSlotID: 1,
            oEndUserSignCert: oCert 
            } 
        } );

    //Digitally sign the document with the certificate I chose
    sigField.signatureSign({oSig: myEngine,
            bUI: false,
            oInfo: { password: ACROSDK.sigUserPwd,
                location: ACROSDK.sigLocation,
                reason: ACROSDK.sigReason,
                contactInfo: ACROSDK.sigContactInfo,
                appearance: "FirmaRPPR"
                }
        });

执行signatureSign时为什么会收到常规错误?在登录签名引擎或cTokenLabel参数时,分配iSlotID参数的正确方法是什么?

提前感谢您的帮助和建议!

1 个答案:

答案 0 :(得分:0)

请注意,我没有使用Acrobat脚本的经验,但在PKCS#11插槽ID中将引用连接到计算机的智能卡读卡器的ID,并且令牌标签将被分配给其中一个智能推车在那个插槽/阅读器中,可以从PKCS#11实现到另一个实现。

找出PKCS#11令牌标签的最简单方法是配置您在Firefox浏览器中用作安全设备的PKCS#11 DLL,并查看配置中的标签字段。但这只是为了让你朝着正确的方向前进。

您可以针对PKCS#11编写一个简短的C程序,并使用C_GetSlotListC_GetSlotInfo找出广告位ID和令牌标签,here就是一个例子那个。将代码移植到VB应该不是问题。还有NCryptoki可用于连接PKCS#11 DLL。