Re: exceptions occur when I use LOAD_CERT_CTRL

George <[email protected]> Wed, 6 Jan 2021 20:06:11 -0500
Newsgroups gmane.comp.encryption.opensc.devel
Message-ID <[email protected]>
Hi,

    Thanks for your help. I was able to enable the debug compile/link in 
the make file and can now step through the code using the visual studio 
debugger.
It looks like the exception

    "Exception thrown at 0x75D046D2 in GENCom.exe: Microsoft C++
    exception: unsigned long at memory location 0x0355CE98. "


is caused by the following code in libp11-libp11-0.4.11\src\libpkcs11.c:

    C_LoadModule(const char *mspec, CK_FUNCTION_LIST_PTR_PTR funcs)
    {
    .
    .
    .
    #ifdef WIN32
         mod->handle = LoadLibraryA(mspec); *<=== *** Exception occurs
    here ****
    #else
    .
    .
    .
    }


I'm not exactly sure why this is happening, though.

After that, I then see alot of the following exceptions:

    Exception thrown at 0x76AC46D2 in GENCom.exe: Microsoft C++
    exception: AI::Middleware::CMWException at memory location 0x0375D26C.
    Exception thrown at 0x76AC46D2 in GENCom.exe: Microsoft C++
    exception: AI::Middleware::CMWException at memory location 0x0375D26C.
    Exception thrown at 0x76AC46D2 in GENCom.exe: Microsoft C++
    exception: AI::Middleware::CMWException at memory location 0x0375D26C.
    Exception thrown at 0x76AC46D2 in GENCom.exe: Microsoft C++
    exception: AI::Middleware::CMWException at memory location 0x0375D26C.
    .
    .
    .


Are these the result of the first exception, or is there a separate problem?




Thanks,
George


On 2021-01-06 8:26 a.m., Douglas E Engert wrote:
>
> ./src/eng_back.c ctx_load_cert() is expecting s_slot_cert_id is either 
> a URI based on RFC7512 or the old way as defined in
> ./src/eng_parse.c parse_slot_id_string. This looks like it is assuming 
> the slot is not defined and returns slot=-1 and the hex id.
>
>
> slot=-1 may not be the issue, but is easy to change.
>
> You are calling a routine that is normally called internally by libp11,
> so it may be missing some setup that libp11 would have done.
>
> Something else that might help in debugging is to use the OpenSC 
> pkcs11 SPY module as the module loaded.
>
> https://github.com/OpenSC/OpenSC/wiki/Using-OpenSC#pkcs-11-spy
>
> On 1/5/2021 11:35 PM, George wrote:
>> Hi,
>>
>> I'm trying to use a certificate on a smart card with OpenSSL + libp11 
>> in Windows 10. However, when I attempt to configure the OpenSSL 
>> PKCS11 engine with "*LOAD_CERT_CTRL*", I'm seeing some exceptions. 
>> Here is my console output :
>>
>>     'GENCom.exe' (Win32): Loaded 
>> 'C:\Users\whipp\junk4\libp11-libp11-0.4.11\src\pkcs11.dll'. Module 
>> was built without symbols.
>>     *Exception thrown at 0x75D046D2 in GENCom.exe: Microsoft C++ 
>> exception: unsigned long at memory location 0x0355CE98.*
>>     *'GENCom.exe' (Win32): Loaded 'C:\Program Files (x86)\HID 
>> Global\ActivClient\ac.smmw.mwctl.dll'. *
>>     *'GENCom.exe' (Win32): Loaded 'C:\Program Files (x86)\HID 
>> Global\ActivClient\ac.smmw.common.srvprov.dll'. *
>>     *'GENCom.exe' (Win32): Loaded 'C:\Program Files (x86)\HID 
>> Global\ActivClient\ac.smmw.common.srvctl.dll'. *
>>     .
>>     .
>>     .
>>
>>
>> Here is a snippet of what my code looks like:
>>
>>     struct
>>     {
>>         const char* s_slot_cert_id;
>>         X509* cert;
>>     } cert_info;
>>     *cert_info.s_slot_cert_id = 
>> "a9bee4d72100c52f77c3fc288d2be01a34b5d44f91b3b7ea3d349b8a25752c45";*
>>     cert_info.cert = NULL;
>>
>>     *int return Code = ENGINE_ctrl_cmd(engine, "LOAD_CERT_CTRL", 0, 
>> &cert_info, NULL, 0);*
>>     *returnCode = SSL_CTX_use_certificate(sslContext, cert_info.cert);*
>>
>> *
>>
>> *The return code from ENGINE_ctrl_cmd is "1" even though I am seeing 
>> some exceptions. Does anyone know what is causing the exceptions and 
>> how I can fix it?
>> Are there any debug logs I can look at? It seems like cert_info.cert 
>> is being populated with a value, but I am not sure if it is valid or 
>> not.*
>> *
>> The value 
>> "2b2586c684d69b670c0a805edf514e720f2b757d8e2faa0b3a7ff23d1ccfc7ba" is 
>> the object ID of the certificate on the smart card:
>>
>>     C:\Program Files\OpenSC Project\OpenSC\tools>pkcs11-tool 
>> --module="C:\Program Files\HID Global\ActivClient/acpkcs211.dll" -l -O
>>     Using slot 0 with a present token (0x0)
>>     Certificate Object; type = X.509 cert
>>        label:      Authentication - *
>>        subject:    DN: C=CA, ST=ON, L=OT, O=ABCD, OU=EFG, CN=*
>>     *ID: 
>> 2b2586c684d69b670c0a805edf514e720f2b757d8e2faa0b3a7ff23d1ccfc7ba*
>>     .
>>     .
>>     .
>>
>>
>> I tried to manually use LOAD_CERT_CTRL in the openssl shell but I 
>> cannot seem to get it to work and cannot find any examples of how to 
>> use it.  Is the syntax for *LOAD_CERT_CTRL* correct? Is there any 
>> detailed documentation on how to use it?
>>
>> Here is what I am trying to do
>>
>>     OpenSSL> engine -vvvv -t dynamic -pre 
>> "SO_PATH:C:\\Users\\whipp\\junk4\\libp11-libp11-0.4.11\\src\\pkcs11.dll" 
>> -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre "MODULE_PATH:C:\Program 
>> Files (x86)\HID
>>     Global\ActivClient\\acpkcs211.dll" -pre PIN:123456 -pre 
>> FORCE_LOGIN *-pre 
>> "LOAD_CERT_CTRL:a9bee4d72100c52f77c3fc288d2be01a34b5d44f91b3b7ea3d349b8a25752c45"
>>
>>     *(dynamic) Dynamic engine loading support
>>     [Success]: 
>> SO_PATH:C:\\Users\\whipp\\junk4\\libp11-libp11-0.4.11\\src\\pkcs11.dll
>>     [Success]: ID:pkcs11
>>     [Success]: LIST_ADD:1
>>     [Success]: LOAD
>>     [Success]: MODULE_PATH:C:\Program Files (x86)\HID 
>> Global\ActivClient\\acpkcs211.dll
>>     [Success]: PIN:123456
>>     [Success]: FORCE_LOGIN
>>     *[Failure]: 
>> LOAD_CERT_CTRL:a9bee4d72100c52f77c3fc288d2be01a34b5d44f91b3b7ea3d349b8a25752c45**
>>     **4196:error:260AB086:engine routines:ENGINE_ctrl_cmd_string:cmd 
>> not executable:.\crypto\engine\eng_ctrl.c:316:*
>>     Loaded: (pkcs11) pkcs11 engine
>>           [ available ]
>>           SO_PATH: Specifies the path to the 'pkcs11' engine shared 
>> library
>>                (input flags): STRING
>>           MODULE_PATH: Specifies the path to the PKCS#11 module 
>> shared library
>>                (input flags): STRING
>>           PIN: Specifies the pin code
>>                (input flags): STRING
>>           VERBOSE: Print additional details
>>                (input flags): NO_INPUT
>>           QUIET: Remove additional details
>>                (input flags): NO_INPUT
>>     *LOAD_CERT_CTRL: Get the certificate from card**
>>     **          (input flags): [Internal]*
>>           INIT_ARGS: Specifies additional initialization arguments to 
>> the PKCS#11 module
>>                (input flags): STRING
>>           SET_USER_INTERFACE: Set the global user interface (internal)
>>                (input flags): [Internal]
>>           SET_CALLBACK_DATA: Set the global user interface extra data 
>> (internal)
>>                (input flags): [Internal]
>>           FORCE_LOGIN: Force login to the PKCS#11 module
>>                (input flags): NO_INPUT
>>     OpenSSL>
>>
>>
>>
>>
>>
>> Thanks,
>> George
>> *
>> *
>>
>>
>> _______________________________________________
>> Opensc-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/opensc-devel
>>
>

_______________________________________________
Opensc-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensc-devel