Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) PKCS11 Find Specific Certificate on Smart Card or USB TokenSee more PKCS11 ExamplesThis example code shows how to find a particular certificate on a smart card or USB token. Note: This example requires Chilkat v9.5.0.88 or later.
LOCAL loPkcs11 LOCAL lnSuccess LOCAL lnSlotID LOCAL lnReadWrite LOCAL lnUserType LOCAL lcPin LOCAL loCert * This example requires the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. * Note: Chilkat's PKCS11 implementation runs on Windows, Linux, Mac OS X, and other supported operating systems. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Pkcs11') loPkcs11 = CreateObject('Chilkat.Pkcs11') * Set your shared lib path -- either a full path to the DLL, .so, or .dylib, * or just the filename if the driver is in a location that can be automatically found. (Such as in C:\Windows\System32) loPkcs11.SharedLibPath = "C:/Program Files (x86)/Gemalto/IDGo 800 PKCS#11/IDPrimePKCS1164.dll" lnSuccess = loPkcs11.Initialize() IF (lnSuccess = 0) THEN ? loPkcs11.LastErrorText RELEASE loPkcs11 CANCEL ENDIF * Pass -1 for the slotID to open a session on the first non-empty slot. lnSlotID = -1 * Open a session. lnReadWrite = 1 lnSuccess = loPkcs11.OpenSession(lnSlotID,lnReadWrite) IF (lnSuccess = 0) THEN ? loPkcs11.LastErrorText RELEASE loPkcs11 CANCEL ENDIF * Make it an authenticated session by calling Login. * * If we don't authenticate, then we won't be able to see the private keys, and thus * we won't know which certificates have an associated private key stored on the smart card. * The smart card PIN is passed to the Login method. * userType 1 indicates a "Normal User". lnUserType = 1 lcPin = "0000" lnSuccess = loPkcs11.Login(lnUserType,lcPin) IF (lnSuccess = 0) THEN ? loPkcs11.LastErrorText lnSuccess = loPkcs11.CloseSession() RELEASE loPkcs11 CANCEL ENDIF * -------------------------------------------------------------------------- * The FindCert method can find a particular certificate in a number of different ways. * I'll demonstrate some common ways.. * 1) In many cases you'll be working with a smart card that contains one certificate that is to be used for * signing, and it is the certificate that is associated with the private key also stored on the smart card (or USB token). * There may be other certificates on the card, but these are the issuer certificates in the chain of authentication. * You're just interested in getting the certificate with the private key. * You can do it like this: * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Cert') loCert = CreateObject('Chilkat.Cert') * Pass the keyword "privateKey" in the 1st argument, and an empty string in the 2nd arg. * This returns the 1st certificate that has a private key. lnSuccess = loPkcs11.FindCert("privateKey","",loCert) IF (lnSuccess = 1) THEN ? "Cert with private key: " + loCert.SubjectCN ELSE ? "No certificates having a private key were found." ENDIF * 2) Find a certificate by the Subject Common Name lnSuccess = loPkcs11.FindCert("subjectCN","Chil application account (8c9be8e0-5544-4cd0-9062-290fbff353a7)",loCert) IF (lnSuccess = 1) THEN ? "Found: " + loCert.SubjectCN ELSE ? "Not found: " + loCert.SubjectCN ENDIF * 3) Find a certificate by hex serial number lnSuccess = loPkcs11.FindCert("serial","5087bf1feda006af54a02f23a851104948acc26f",loCert) IF (lnSuccess = 1) THEN ? "Found: " + loCert.SerialNumber ELSE ? "Not found: " + loCert.SerialNumber ENDIF * 4) Find a certificate by hex serial number and Issuer Common Name lnSuccess = loPkcs11.FindCert("serial:issuerCN","5087bf1feda006af54a02f23a851104948acc26f:Ibanity Production Third Party Application CA",loCert) IF (lnSuccess = 1) THEN ? "Found: " + loCert.SubjectCN ELSE ? "Not found: " + loCert.SubjectCN ENDIF * -------------------------------------------------------------------------- * Revert to an unauthenticated session by calling Logout. lnSuccess = loPkcs11.Logout() IF (lnSuccess = 0) THEN ? loPkcs11.LastErrorText lnSuccess = loPkcs11.CloseSession() RELEASE loPkcs11 RELEASE loCert CANCEL ENDIF * When finished, close the session. * It is important to close the session (memory leaks will occur if the session is not properly closed). lnSuccess = loPkcs11.CloseSession() IF (lnSuccess = 0) THEN ? loPkcs11.LastErrorText RELEASE loPkcs11 RELEASE loCert CANCEL ENDIF ? "Success." RELEASE loPkcs11 RELEASE loCert |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.