2015-11-24 3 views
0

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

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

enter image description here

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

enter image description here

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

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 

Я что-то упустил?

+0

Каков тип/расширение файла сертификата? это может быть .cer или .pfx? Используете ли вы тот же файл, когда вы проводили сравнение между его установкой вручную и кодом? –

+1

Кстати, второй сертификат, похоже, является сертификатом эмитента. Скорее всего, вы захотите установить его в папку доверенных корневых центров сертификации вместо папки «Личные» (предполагая, что вы доверяете эмитенту этого сертификата). –

+0

Расширение файла сертификата - .p12. Да, я использую тот же файл для обеих установок. –

ответ

4

Используйте 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 - это папка доверенных корневых центров сертификации. И вы должны только импортировать сертификаты там, если доверяете эмитенту.

Смежные вопросы