2011-12-30 3 views
1

У меня есть сертификат (.pem-файл), который распространяется другим поставщиком услуг. Я загрузил сертификат у поставщика и сохранил его на локальном диске. В моем клиенте WCF я пытаюсь загрузить этот сертификат с локального диска, и он дает мне сообщение об ошибке «Закрытый ключ отсутствует в сертификате X.509» при общении с службой. Мне сказали, что мне нужно загрузить этот сертификат в локальное хранилище сертификатов, чтобы устранить эту ошибку. Может ли кто-нибудь указать некоторые направления? Благодаря!Как загрузить другой сертификат в мой локальный магазин сертификатов?

У меня есть функция ниже, чтобы загрузить сертификат из пути, указанного в параметре файла.

public static X509Certificate LoadCertificate(string file) 
    { 
     try 
     { 
      return X509Certificate.CreateFromCertFile(file); 
     } 
     catch (System.Security.Cryptography.CryptographicException) 
     { 
      string filestr = File.ReadAllText(file); 

      StringBuilder sb = new StringBuilder(filestr.Remove(0, filestr.IndexOf("-----BEGIN CERTIFICATE-----"))); 

      sb.Replace("-----BEGIN CERTIFICATE-----", ""); 
      sb.Replace("-----END CERTIFICATE-----", ""); 
      //Decode 
      try 
      {  //see if the file is a valid Base64 encoded cert 
       byte[] certBytes = Convert.FromBase64String(sb.ToString()); 

       return new X509Certificate(certBytes); 
      } 
      catch (System.FormatException) 
      { 
       throw; 
      } 
     } 
    } 

В моем клиенте WCF выполняется загрузка сертификата, созданного из функции LoadCertificate().

public X509Certificate Certificate { get; set; } 

    ClientCredentials loginCredentials = new ClientCredentials(); 
    loginCredentials.UserName.UserName = this.UserId; 
    loginCredentials.UserName.Password = this.Password; 
    loginCredentials.ClientCertificate.Certificate = new X509Certificate2(this.Certificate); 
+1

просто щелкните его правой кнопкой мыши и выберите «установить» ... – Yahia

+0

Можете ли вы поделиться каким-то кодом? Если нет, решение @ Yahia может быть вашим единственным шансом. –

+0

Я не нашел вариант «установить» правой кнопкой мыши. Кроме того, инструкции от поставщика «Этот сертификат должен быть сохранен как файл на вашем веб-сервере с расширением .pem». Я не знаю, означает ли это, что сертификат необходимо установить или просто нужно сохранить. – Jyina

ответ

1

Ваш код говорит, что вы пытаетесь использовать сертификат аутентификации клиента на сервере, в дополнение к обеспечению имя пользователя и пароль. Это довольно странно, но я думаю, возможно. Для этой цели вам понадобятся секретные ключи, связанные с этим сертификатом, так как клиенту понадобится их для шифрования связи, чтобы сервер мог использовать сертификат для дешифрования и проверки того, что клиент является законным. Файл .pem может содержать как открытый, так и закрытый ключи, но, возможно, тот, который был отправлен вам, не работает?

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

Сделайте это, Microsoft дважды щелкнул файл .pem в браузере файлов, запустив мастер импорта сертификатов. Но в случае, если это не работает для вас, здесь трудный путь:

  • Start - запуск - ММС
  • Файл - Добавить/Удалить оснастку в
  • «сертификаты»
  • Select - нажмите кнопку Добавить - выберите компьютер счет - Локальный компьютер
  • Закрыть окно оснастки с OK

  • Теперь перейдите Сертификаты (Локальный компьютер) - Персональные - Сертификаты

  • Щелкните правой кнопкой мыши - Все задачи - Импорт
Смежные вопросы