2015-12-03 2 views
0

Я поддерживаю приложение VB6 Windows, которое подписывает PDF-документы под цифровой подписью, запустив JS-файл, расположенный в подпапке Javascripts от Acrobat 9.0. Теперь мой клиент хочет подключить другой считыватель смарт-карт к ПК, на котором размещается приложение, со своей собственной смарт-картой, содержащей сертификаты, относящиеся ко второму человеку, который подпишет определенный тип документов.Выбор смарт-карт для цифровой подписи

Мой вопрос: как я могу программным образом выбрать из своего кода 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? Каким образом можно назначить параметр iSlotID при входе в механизм подписи или, альтернативно, параметр cTokenLabel?

Заранее благодарим за помощь и предложения!

ответ

0

Учтите, что у меня нет опыта использования скриптов Acrobat, но в идентификаторе слота PKCS # 11 будет ссылаться на идентификатор считывателя смарт-карт, подключенного к компьютеру, а маркерная метка будет присвоена метке одному из умных в этом слоте/считывателе, которые могут варьироваться от реализации PKCS # 11 до другой.

И самый простой способ узнать метку токена PKCS # 11 - настроить DLL PKCS # 11, которую вы используете как устройство безопасности в браузере Firefox, и увидеть поле метки в конфигурации. Но это будет просто для того, чтобы вы пошли в правильном направлении.

Вы можете написать короткую программу C против PKCS # 11 и использовать C_GetSlotList и C_GetSlotInfo, чтобы узнать слот идентификаторы и символические метки, here является примером этого. Не должно быть проблем с переносом этого кода на VB. Также есть NCryptoki, который можно использовать для взаимодействия с PKCS # 11 DLL.

Смежные вопросы