2013-02-22 4 views
1

Я использую этот код для установки самозаверяющего сертификата (пользователь должен подтвердить установку).Как проверить, установлен ли сертификат ssl?

// Constructor 
    public MainPage() 
    { 
     this.Loaded += new RoutedEventHandler(MainPage_Loaded); 

    } 
    private async void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      StorageFolder packageLocation = Windows.ApplicationModel.Package.Current.InstalledLocation; 
      StorageFolder certificateFolder = await packageLocation.GetFolderAsync("Certificates"); 
      StorageFile certificate = await certificateFolder.GetFileAsync("myCer.cer"); 

      await Launcher.LaunchFileAsync(certificate); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 
    } 

Можно ли проверить, установлен ли сертификат, так что я не придется устанавливать его каждый раз, когда мое приложение запускается?

+0

Вы можете просто попытаться прочитать сертификат из хранилища сертификатов по его серийный номер, эмитент и т.д. –

+0

Не могли бы вы дать мне подсказку о том, как это сделать что? Спасибо. – MPeli

+0

На самом деле вы могли бы найти это в Google самостоятельно (это не относится к WP, поэтому никаких гарантий): http://stackoverflow.com/questions/1205295/get-list-of-certificates-from-the-certificate-store- in-c-sharp – Raxr

ответ

0

Почему вы не пытаетесь найти что-то подобное, чтобы найти сертификат. Также укажите это пространство имен в свой проект System.Security.Cryptography.X509Certificates; Если вы не можете использовать X509, вы можете изменить приведенный ниже код, чтобы использовать для сертификата другой тип.

private static X509Certificate2 GetCertificateFromStore(string certSN) 
     { 

      X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
      try 
      { 
       store.Open(OpenFlags.ReadOnly); 
       X509Certificate2Collection col = store.Certificates; 

       foreach (var currCert in col) 
       { 
        var currSN = currCert.SerialNumber; 
        if (certSN.ToUpperInvariant() == currSN) 
        { 
         return currCert; // you found it return it 
         break; 
        } 

       } 

       return null; // you didnt now install it... 
      } 
      finally 
      { 
       store.Close(); 
      } 


     } 
+0

Спасибо. Я не думаю, что смогу использовать ваш подход, потому что нет классов [X509Store] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store.aspx) и [X509Certificate2Collection] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2collection.aspx) в WP8. – MPeli

1

Сертификаты могут быть сравнены во многих отношениях, но два наиболее распространенными являются по

  • По Thumbprint
    • криптографической хэш открытого ключа
    • Рассчитано по запросу - не хранится в сам сертификат
    • Уникальный по всем сертификатам
    • Dif ficult подделать при использовании столкновения устойчивого алгоритма хеширования (http://en.wikipedia.org/wiki/Preimage_attack)
  • по серийному номеру и эмитентю
    • Мандатных быть уникальными при использовании инфраструктуры открытых ключей
    • Faster для сравнения, как не требуется вычисление
    • Может доверять только, когда вы проверяете доверие сети. Злоумышленник может создать самоподписанный сертификат с выбранным серийным номером и именем эмитента.

В коде:

X509Certificate cert1 = /* your cert */; 
X509Certificate cert2 = /* your other cert */; 

// assuming you are validating pki chain 
// X509Certificate compares the serial number and issuer 
bool matchUsingSerialAndIssuer = cert1.Equals(cert2); 

// otherwise 
bool publicKeyIsIdentical = cert1.GetCertHashString() == cert2.GetCertHashString(); 
// or easier to read if using X509Certificate2 (Thumbprint calls GetCertHashString) 
// bool publicKeyIsIdentical = cert1.Thumbprint == cert2.Thumbprint; 
Смежные вопросы