- Код: Выделить всё
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. Таже ошибка.