Win32::OLE and CAPICOM to find a certificate in certificate store will raise exception

Discussion in 'Perl Misc' started by danielhe99@gmail.com, Jul 20, 2006.

  1. Guest

    Hi,

    I am trying to use win32::OLE to access certificate store via CAPICOM.
    If certificates in the store meet the searching criteria, the
    certificates object
    method "find" works, but if no certificate meets the searching
    criteria, it will raise
    an error message:
    OLE exception from "<Unknown Source>": The Data is invalid.

    How to solve the problem or catch the exception in Perl script?

    Thanks!

    ===== test case =======
    #!c:/Perl/bin/perl.exe -w
    #Test store->certificates->Find

    use strict;
    use Win32::OLE;

    # CAPICOM constant definitions
    use constant {
    # Store Location
    #
    http://msdn.microsoft.com/library/en-us/security/security/capicom_store_location.asp
    CAPICOM_LOCAL_MACHINE_STORE => 1,
    CAPICOM_CURRENT_USER_STORE => 2,
    # Store Open Mode
    #
    http://msdn.microsoft.com/library/en-us/security/security/capicom_store_open_mode.asp
    CAPICOM_STORE_OPEN_READ_ONLY => 0,
    # key storage flags
    #
    http://msdn.microsoft.com/library/d...en-us/seccrypto/security/certificate_load.asp
    CAPICOM_KEY_STORAGE_DEFAULT => 0,
    # The Find method returns a Certificates object that contains all
    certificates that
    # match the specified search criteria. This method was introduced
    in CAPICOM 2.0. see:
    #
    http://msdn.microsoft.com/library/d...n-us/seccrypto/security/certificates_find.asp
    CAPICOM_CERTIFICATE_FIND_SHA1_HASH => 0,
    };

    # Search the certificate with the thumbprint SHA1 in local certificate
    store.
    my $SHA1 = "0000000049d8650d2515111709ee1b4800000000";

    Win32::OLE->Option ('Warn' => 3);

    # Create a new Store object, and use it to open the store. See
    #
    <http://msdn.microsoft.com/library/en-us/security/security/store.asp>.
    my $Store = Win32::OLE->new('CAPICOM.Store', sub {$_[0]->Close();})
    or die "Oops, cannot start CAPICOM";
    $Store->Open (CAPICOM_LOCAL_MACHINE_STORE, 'ROOT',
    CAPICOM_STORE_OPEN_READ_ONLY);

    # TEST the certificates->find function
    # if no certificate is found, this program will hangup after several
    tries!
    # here 10 tries, should print out 10 times "continue searching..." if
    no exception.
    for(1...10)
    {
    $Store->Certificates->Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH,
    $SHA1);
    print "continue searching...\n";
    }
    print "\nCompleted.\n";


    # perl version
    #
    # This is perl, v5.8.8 built for MSWin32-x86-multi-thread
    # (with 25 registered patches, see perl -V for more detail)
    #
    # Copyright 1987-2006, Larry Wall
    #
    # Binary build 817 [257965] provided by ActiveState
    http://www.ActiveState.com
    # Built Mar 20 2006 17:54:25
    , Jul 20, 2006
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. ernest
    Replies:
    2
    Views:
    289
    Roy Smith
    Nov 14, 2010
  2. Jack Bates
    Replies:
    0
    Views:
    277
    Jack Bates
    May 2, 2011
  3. SDWR

    CAPICOM, Certificate Stores, and ASP.NET

    SDWR, Aug 10, 2004, in forum: ASP .Net Security
    Replies:
    0
    Views:
    352
  4. Gary at Arrowpoint

    Access is Denied Exception using Interop.CAPICOM.dll (or CAPICOM.d

    Gary at Arrowpoint, Aug 30, 2005, in forum: ASP .Net Security
    Replies:
    0
    Views:
    350
    Gary at Arrowpoint
    Aug 30, 2005
  5. Lance Hoffmeyer
    Replies:
    0
    Views:
    238
    Lance Hoffmeyer
    Nov 17, 2003
Loading...

Share This Page