Collecting and Verifying Certificates
[CAPICOM is a 32-bit only component that is available for use in the following operating systems: Windows Server 2008, Windows Vista, and Windows XP. Instead, use the .NET Framework to implement security features. For more information, see Alternatives to Using CAPICOM.]
Often a group of certificates needs to be collected and verified. This would often be done to prepare a group of recipients for an enveloped message. In the example that follows, the certificates in a local store are enumerated and checked for validity. Next, an Active Directory store is opened to retrieve and add to the local store new certificates. The certificates retrieved from the active directory store are checked for validity and, if valid, are added to the local store. Both stores are then closed.
On any CAPICOM error, a negative decimal value of Err.Number is returned. For more information, see CAPICOM_ERROR_CODE. For information about positive decimal values of Err.Number, see Winerror.h.
In this example, the name of the local store is passed in as a string parameter. A string indicating the search criteria for certificates in the Active Directory store is also passed in as a parameter.
Sub CollectValidCerts(ByVal storename As String, ByVal _
certname As String)
On Error GoTo errorhandler
' Prepare a local certificate store to contain valid
' certificates for the recipients of an enveloped
' message.
' Open the local store and go to the certificates in the store
' 1. Display the certificate
' 2. Check the validity of the certificate
' 3. Remove certificates that are not valid from the store
Dim LocalStore As New Store
Dim ADStore As New Store
Dim i As Long
LocalStore.Open(CAPICOM_CURRENT_USER_STORE, storename, _
CAPICOM_STORE_OPEN_READ_WRITE)
MsgBox("There are " & LocalStore.Certificates.Count & _
" certificates in this store ")
For i = 1 To LocalStore.Certificates.Count
If LocalStore.Certificates.Item(i).IsValid Then
LocalStore.Certificates.Item(i).Display()
Else
MsgBox("A certificate that is not valid was found.")
End If
Next i
' Open the AD store and retrieve a certificate based
' on a string passed into the function. Add any valid
' certificates found to the local store.
ADStore.Open(CAPICOM_ACTIVE_DIRECTORY_USER_STORE, certname, _
CAPICOM_STORE_OPEN_READ_ONLY)
MsgBox("There are " & ADStore.Certificates.Count & _
" certificates in the AD store.")
For i = 1 To ADStore.Certificates.Count
If ADStore.Certificates.Item(i).IsValid Then
ADStore.Certificates.Item(i).Display()
LocalStore.Add(ADStore.Certificates.Item(i))
Else
MsgBox("the certificate from the AD store is not valid.")
End If
Next i
LocalStore = Nothing
ADStore = Nothing
MsgBox("Sub finished without error ")
Exit Sub
errorhandler:
If Err.Number > 0 Then
MsgBox("Visual Basic error found:" & Err.Description)
Else
MsgBox("CAPICOM error found : " & Err.Number)
End If
End Sub