Установка сертификата PFX

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Установка сертификата PFX

Сообщение djalex777 » 06.04.2011 (Ср) 15:51

Генерирую сертификат:
Код: Выделить всё
openssl pkcs12 -in cert.crt -inkey private.key -export -out a.pfx -password pass:


Вручную сертификат ставится нормально. Возникла необходимость устанавливать его автоматически. Делаю так:

Объявления:
Код: Выделить всё
...
Private Type CRYPT_DATA_BLOB
ln As Long
b As Long
End Type

Private Declare Function CertOpenSystemStoreA Lib "crypt32" ( _
  ByVal hprov As Long, _
  ByVal szSubsystemProtocol As String _
) As Long

Private Declare Function CertAddEncodedCertificateToStore Lib "crypt32" ( _
  ByVal hCertStore As Long, _
  ByVal dwCertEncodingType As Long, _
  ByRef pbCertEncoded As Long, _
  ByVal cbCertEncoded As Long, _
  ByVal dwAddDisposition As Long, _
  ByVal ppCertContext As Long _
) As Integer

Private Declare Function PFXIsPFXBlob Lib "crypt32" ( _
  pPFX As CRYPT_DATA_BLOB _
) As Integer

Private Const CERT_STORE_ADD_NEW As Long = 1
...


Сам код:
Код: Выделить всё
function AddCert()
Dim cdl As CRYPT_DATA_BLOB, msh as long, ch as long
Dim b() as byte, res as integer
    b = ReadFile2Bytes("путь к файлу сертификата") 'Загружает файл в байтовый массив (1 to FileLen)
    cdl.ln = ubound(b)
    cdl.b = VarPtr(b(1))

    IF PFXIsPFXBlob(cdl) Then
        mys = CertOpenSystemStoreA(0, "My")
        res = CertAddEncodedCertificateToStore(mys, PKCS_7_ASN_ENCODING Or X509_ASN_ENCODING, ByVal cdl.b, cdl.ln, CERT_STORE_ADD_NEW, 0)
        ...
    End IF
...
End Function

Не срабатывает функция CertAddEncodedCertificateToStore (результат 0). Ошибка err.LastDllError -2146881278 (80093102). Описание в интернете никак не могу найти. Что я не так делаю? Или как установить сертификат по-другому? Пробовал через PFXImportCertStore, а затем CertAddCertificateContextToStore. Таже ошибка.
Последний раз редактировалось djalex777 06.04.2011 (Ср) 16:04, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Установка сертификата PFX

Сообщение Хакер » 06.04.2011 (Ср) 16:04

djalex777 писал(а):шибка err.LastDllError -2146881278 (80093102). Описание в интернете никак не могу найти.

ErrLookup на что? Он знает описание.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Установка сертификата PFX

Сообщение djalex777 » 06.04.2011 (Ср) 18:02

Толку от описания ошибки оказалось никакого. Но разобрался. Спасибо.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Установка сертификата PFX

Сообщение Хакер » 07.04.2011 (Чт) 4:05

djalex777 писал(а):Толку от описания ошибки оказалось никакого.

Как это никакого? Наверняка криво читаешь файл, с обрезкой не до истинного конца. Угадал же?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Установка сертификата PFX

Сообщение djalex777 » 07.04.2011 (Чт) 10:45

Нет, не угадал :) . Как можно криво считать файл? Описание ошибки (в моем случае) не соответствовало действительности.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Установка сертификата PFX

Сообщение Хакер » 07.04.2011 (Чт) 10:46

djalex777 писал(а): Как можно криво считать файл?

Считать первые 1067 байтов из 1068.

djalex777 писал(а):Описание ошибки (в моем случае) не соответствовало действительности.

Ну так расскажи, чтобы в последствии наткнувшиеся на эту тему знали, в чём может быть дело.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Установка сертификата PFX

Сообщение djalex777 » 07.04.2011 (Чт) 10:57

Хакер писал(а):Считать первые 1067 байтов из 1068.

Да я понял что ты имел ввиду.

Сам код был неверным. Я неверно понял предназначение функций. Вот верный код:
Код: Выделить всё
Dim cdl As CRYPT_DATA_BLOB, mys As Long, pfxImport As Long
Dim b() As Byte, pfxCert as long, e As Integer
    b = ReadFile2Bytes("путь к файлу сертификата") 'Загружает файл в байтовый массив (1 to FileLen)
    cdl.ln = ubound(b)
    cdl.b = VarPtr(b(1))

    If PFXIsPFXBlob(cdl) Then
        pfxImport = PFXImportCertStore(cdl, "", &H1000 Or &H10)
        pfxImport = PFXImportCertStore(cdl, "", &H1000 Or &H10)
                   
        mys = CertOpenSystemStoreA(0, "My")
                   
        pfxCert = CertEnumCertificatesInStore(pfxImport, 0)
                   
        If (pfxCert) Then
            e = CertAddCertificateContextToStore(mys, pfxCert, CERT_STORE_ADD_NEWER, ByVal 0)
            If (e) Then InstallCertificate = True
        End If
   
        If pfxImport <> 0 Then CertCloseStore pfxImport, &H1
        CertCloseStore mys, 0
    End If


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 96

    TopList