On 12/20/2012 7:54 AM, Matthew Zimmerman wrote: > I'm trying to debug an SSL connection to a webserver utilizing my PIV > Authentication Certificate and the associated private key on my card > and I believe I've found a bug in mechanism.c > > I *think* I'm doing everything correctly, although documentation on > the engine in openssl are *very* sparse. Here's how I'm setting up > the connection. > > openssl > engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre > ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre > MODULE_PATH:src/pkcs11/.libs/opensc-pkcs11.so -pre VERBOSE > s_client -engine pkcs11 -connect webserver:443 -CAfile ca.crt -cert > pivauth.crt -certform PEM -key 1:01 -keyform engine -prexit > > According to the opensc tools, my card is in slot 1 and my key is id > 01. I'm fairly certain I'm using the -key and -keyform parameters > correctly but I'm not sure of -cert and -certform. Should I instead > be telling openssl how to pull the cert from my card instead of the > local file (which corresponds with the key?) How do I do that? (I've > tried a few ways.)
The OpenSC engine can pull the cert from the card, but it looks like the OpenSSL c_client does not support using an engine for the cert. It calls load_cert. Look at the load_cert (vs the load_key) routines in the OpenSSL src/apps/apps.c It does not recognize FORMAT_ENGINE. So you have to get the cert off the card in a separate step: pkcs15-tool -r 01 > cert.01.pem For the -key parameter, I have always used slot_1-id_01 for the auth cert. I had not looked to see if 1:01 works too. An examples: openssl << EOT engine dynamic -vvvv -pre SO_PATH:$OPENSC_ENGINE/engines/engine_pkcs11.so -pre ID:pkcs11 -pre NO_VCHECK:1 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:$OPENSC_PATH/opensc-pkcs11.so dgst -engine pkcs11 -keyform engine -sign slot_1-id_02 -c -out /tmp/test.ec.sig.out fake.ec.key/ec.msg.txt EOT > > This will prompt me for my pin, but then segfaults on line 428 of > mechanism.c -- seemingly data is pointing to an address but has no > member buffer_len (this could be wrong, my c and gdb experience is > highly lacking) > > Found slot: Broadcom Corp 5880 [Contacted SmartCard] (0123456789ABCD) 00 00 > Found token: PIV_II (PIV Card Holder pin) > Found 4 certificates: > 1 Certificate for PIV Authentication > 2 Certificate for Digital Signature > 3 Certificate for Key Management > 4 Certificate for Card Authentication > PKCS#11 token PIN: > Found 4 keys: > 1 P PIV AUTH key > 2 P SIGN key > 3 P KEY MAN key > 4 P CARD AUTH key > > Program received signal SIGSEGV, Segmentation fault. > 0x00002aaaac155660 in sc_pkcs11_signature_final (operation=0x6cb7d0, > pSignature=0x7fffffffda30 "", pulSignatureLen=0x0) at mechanism.c:428 > 428 sc_log(context, "data length %li", data->buffer_len); > (gdb) print data > $1 = (struct signature_data *) 0x30 > (gdb) print data->buffer_len > Cannot access memory at address 0x248 > (gdb) backtrace > #0 0x00002aaaac155660 in sc_pkcs11_signature_final > (operation=0x6cb7d0, pSignature=0x7fffffffda30 "", > pulSignatureLen=0x0) at mechanism.c:428 > #1 0x00002aaaab036e3d in look_str_cb () from /usr/lib/libcrypto.so.1.0.0 > #2 0x00002aaaab04722c in lh_doall_arg () from /usr/lib/libcrypto.so.1.0.0 > #3 0x00002aaaab03565c in engine_table_doall () from > /usr/lib/libcrypto.so.1.0.0 > #4 0x00002aaaab037203 in ENGINE_pkey_asn1_find_str () from > /usr/lib/libcrypto.so.1.0.0 > #5 0x00002aaaab071fa3 in EVP_PKEY_asn1_find_str () from > /usr/lib/libcrypto.so.1.0.0 > #6 0x00002aaaaad179d7 in ssl_create_cipher_list () from > /usr/lib/libssl.so.1.0.0 > #7 0x00002aaaaad10964 in SSL_CTX_new () from /usr/lib/libssl.so.1.0.0 > #8 0x000000000043d07e in ?? () > #9 0x0000000000419587 in ?? () > #10 0x000000000041927d in ?? () > #11 0x00002aaaab363725 in __libc_start_main () from /usr/lib/libc.so.6 > #12 0x000000000041934d in ?? () > #13 0x00007fffffffe598 in ?? () > #14 0x0000000000000000 in ?? () > > Thanks for any advice/patches/help :) > Matt > _______________________________________________ > opensc-devel mailing list > opensc-devel@lists.opensc-project.org > http://www.opensc-project.org/mailman/listinfo/opensc-devel > > -- Douglas E. Engert <deeng...@anl.gov> Argonne National Laboratory 9700 South Cass Avenue Argonne, Illinois 60439 (630) 252-5444 _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel