Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
djalex777
-
- Постоялец
-
-
- Сообщения: 461
- Зарегистрирован: 23.03.2006 (Чт) 16:02
-
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
- Откуда: Казахстан, Петропавловск
-
Хакер » 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
-
djalex777 » 06.04.2011 (Ср) 18:02
Толку от описания ошибки оказалось никакого. Но разобрался. Спасибо.
-
Хакер
-
- Телепат
-
-
- Сообщения: 16478
- Зарегистрирован: 13.11.2005 (Вс) 2:43
- Откуда: Казахстан, Петропавловск
-
Хакер » 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
-
djalex777 » 07.04.2011 (Чт) 10:45
Нет, не угадал
. Как можно криво считать файл? Описание ошибки (в моем случае) не соответствовало действительности.
-
Хакер
-
- Телепат
-
-
- Сообщения: 16478
- Зарегистрирован: 13.11.2005 (Вс) 2:43
- Откуда: Казахстан, Петропавловск
-
Хакер » 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
-
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, Google-бот, Mail.ru [бот], Yandex-бот и гости: 53