ICertificates2::Find method как найти сертификат по отпечатку через Capicom.dll

‘константы описанные в https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/certificates-find
‘ICertificates2::Find method
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9
Const CAPICOM_ENCRYPTION_ALGORITHM_RC2 = 0
Const CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM = 0

‘использую эту константу для поиска CAPICOM_CERTIFICATE_FIND_SHA1_HASH Returns certificates matching a specified SHA1 hash.
Const CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0
bFindValidOnly = false

‘ varCriteria [in, optional]

‘ A variant that contains the search criteria. This data must match the type of data specified in the FindType parameter. If the value of the FindType parameter is CAPICOM_CERTIFICATE_FIND_TIME_VALID, CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID, or CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED and you do not pass a value into this parameter, the current time is assumed. For examples of each data type, see Remarks. The default value is 0.

‘ bFindValidOnly [in, optional] – Булево

‘когда установлен в True то:

‘ Сертификаты которые истекли или не валидные
‘ Сертификаты не установлен как надо
‘ Сертификаты имеют проблемы с подписями
‘ Сертификаты отозваны

‘ Открытие хранилища сертификатов.
Dim StoreCert
Set StoreCert = CreateObject(“CAPICOM.Store”)
StoreCert.Open StoreLocation, StoreName

‘ В качестве кандитатов на сертификаты получателя
‘ изначально определяются все сертификаты хранилища.
Set Certificates = StoreCert.Certificates

‘ Из них выбираются только сертификаты, действительные в настоящее время.
If Certificates.Count > 0 Then
‘Set Certificates = Certificates.Find(CAPICOM_CERTIFICATE_FIND_TIME_VALID, Now)

‘поиск по отпечатку в хранилище сертификатов
Fingerprint_sha1 = “615f33c4a4c5f73c19843f0d4748002b81838178”
Set Certificates = Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, Fingerprint_sha1, )
End If

‘ Выбор сертификата (сертификатов). Если после проведенной фильтрации осталось несколько кандидатов,
‘ то пользователю предоставляется выбор одного из них или нескольких (при помощи диалогового окна).
Select Case Certificates.Count
Case 0
Wscript.Stdout.Writeline “Error: No recipient’s certificate can be found.”
Wscript.Quit(1)

Case 1
‘ Остался только один, потому он и будет использоваться.

Case Else
‘ Пользователь выбирает сертификат (сертификаты) получателя.
Set Certificates = Certificates.Select(“CEnvelop.vbs”, “Please select one or more recipient’s certificate(s).”, True)
If Certificates.Count = 0 Then
Wscript.Stdout.Writeline “Error: Certificate selection dialog was cancelled.”
Wscript.Quit(2)
End If

End Select

+ Нет комментариев

Добавить свой