Установка сертификата x509 с использованием VB.NET

У меня проблема с установкой сертификата x509 в систему через vb.net.

Сама установка прошла успешно, но когда я устанавливаю ее с помощью кода, я получаю одну запись в окне «Управление сертификатами», как показано ниже:

введите здесь описание изображения

Однако, когда я устанавливаю его вручную, используя функцию импорта в окне «Управление сертификатами», я получаю две записи в списке для этого сертификата:

введите здесь описание изображения

Проблема, с которой я сталкиваюсь, заключается в том, что когда я использую этот сертификат для выполнения определенных задач (передача некоторой информации сторонней службе), он работает только тогда, когда он импортирован вручную (в списке сертификатов есть две записи). Похоже, что при установке сертификата через код он не устанавливается полностью. Я провел много исследований кода, используемого для установки сертификата, и он выглядит довольно прямолинейно:

    With ofd
            .Title = "Select Certificate"
            .FileName = ""
            .CheckFileExists = True
            If .ShowDialog <> Windows.Forms.DialogResult.Cancel Then
                Dim cert As New X509Certificate2(.FileName, "xxxxxxx", X509KeyStorageFlags.UserKeySet)
                Dim certStore As New X509Store(StoreName.My, StoreLocation.CurrentUser)
                certStore.Open(OpenFlags.ReadWrite)
                certStore.Add(cert)
                certStore.Close()
            End If
        End With

Я что-то упускаю?


person Rasa Rin    schedule 24.11.2015    source источник
comment
Каков тип/расширение файла сертификата? это .cer или .pfx может быть? Вы использовали один и тот же файл, когда сравнивали его установку вручную и с помощью кода?   -  person Yacoub Massad    schedule 24.11.2015
comment
Кстати, второй сертификат, похоже, является сертификатом эмитента. Скорее всего, вы захотите установить его в папку «Доверенные корневые центры сертификации», а не в папку «Личные» (при условии, конечно, что вы доверяете эмитенту этого сертификата).   -  person Yacoub Massad    schedule 24.11.2015
comment
Расширение файла сертификата — .p12. Да, я использую один и тот же файл для обеих установок.   -  person Rasa Rin    schedule 24.11.2015


Ответы (1)


Используйте X509Certificate2Collection такой класс:

Dim collection = New X509Certificate2Collection()

collection.Import(.FileName, "xxxxxxx", X509KeyStorageFlags.UserKeySet)

Dim store = New X509Store(StoreName.My, StoreLocation.CurrentUser)

store.Open(OpenFlags.ReadWrite)

Try
    For Each certificate As X509Certificate2 In collection
        store.Add(certificate)
    Next
Finally
    store.Close()
End Try

Это позволяет импортировать все сертификаты из файла.

Обратите внимание, что правильное место для сертификатов CA — папка Trusted Root Certification Authorities. И вы должны импортировать сертификаты туда только в том случае, если вы доверяете эмитенту.

person Yacoub Massad    schedule 24.11.2015