Развернуть все
Свернуть все

Проверка своего сертификата перед использованием

Пример проверки своего сертификата перед использованием

VBScript
    ' получаем объект CAPICOM.Certificate
    Dim oCert: Set oCert = GetCapicomCertificate()
    
    Dim PKIValidator: Set PKIValidator = _
        CreateObject("PKIValidator.PrivateKeyUsageValidator")

    ' Проверяем конечный сертификат на данный момент времени, 
    ' если необходимо проверить можно ли использовать закрытый ключ 
    ' в данный момент времени. Данная проверка не выполняет
    ' проверку статуса сертификата на отзыв.         
    Dim isCertValidNowByPKUP: isCertValidNowByPKUP = _
        PKIValidator.IsCertValidNow(oCert)
        
    ' Закрытый ключ сертификата не может использоваться 
    ' для подписи или шифрования. Его срок действия либо уже истек, 
    ' либо еще не наступил.
    If Not isCertValidNowByPKUP Then _
        DoSmthIfError()        

C#
        // Получаем сертфикат CAPICOM (существует только 32-битная capicom.dll!)
        CAPICOM.CertificateClass certCapicom = GetCapicomCertificate();
        
        // Получаем сертификат X509Certificate2
        System.Security.Cryptography.X509Certificates.X509Certificate2 certX509 =
                GetX509Certificate();

        // Создаем объект 
        PKIValidatorLib.PrivateKeyUsageValidatorClass validator =
                new PKIValidatorLib.PrivateKeyUsageValidatorClass();

        bool isValidByPKUPNow;
        try
        {
                // Проверяем на текущий момент, передавая CAPICOM.Certificate
                isValidByPKUPNow = validator.IsCertValidNow(certCapicom);
                // Можно воспользоваться X509Certificate2, при этом будет передаваться PCCERT_CONTEXT
                // Обязательно надо преобразовать IntPtr с помощью метода IntPtr.ToInt64(), иначе
                // 64-битный указатель будет передан неправильно!
                isValidByPKUPNow = validator.IsCertValidNow(certX509.Handle.ToInt64());
        }
        catch (Exception ex)
        {
                DoSmthIfError("Invalid Parameter" + ex.Message);
                return;
        }

        if (!isValidByPKUPNow)
                DoSmthIfError("Not valid now");

        return ;