2014-05-23 20 views
17

Kiedy korzystałem z roli internetowej, właśnie przesłałem certyfikat do lazurowego portalu i mogłem go zobaczyć. Teraz przełączyłem się na stronę internetową na błękitnym tle i przesłałem certyfikat w lazurowy portal zarządzania, ale mój kod w ogóle go nie widzi.Uzyskiwanie dostępu do przesłanych certyfikatów w witrynach internetowych w kolorze błękitnym

Czy są jakieś konfiguracje, które musimy wykonać, lub w inny sposób uzyskać dostęp do przesłanych certyfikatów w lazurowych witrynach sieci Web.

Oto jak próbuję uzyskać dostęp do przesłanego certyfikatu.

private List<string> GetAvailableCertificatesFromStore() 
{ 
    var list = new List<string>(); 
    var store = new X509Store(StoreName.My,StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly); 

    try 
    { 
     foreach (var cert in store.Certificates) 
     { 
      // todo: add friendly name 
      list.Add(string.Format("{0}", cert.Subject)); 
     } 
    } 
    finally 
    { 
     store.Close(); 
    } 

    return list; 
} 

Odpowiedz

11

AKTUALIZACJA - 23 lipca 2015: Ta odpowiedź jest już nieaktualne (było poprawne w chwili jego przewidzianego chociaż). Zobacz odpowiedź S Armstronga poniżej.

Rzeczy działają inaczej w Azure Cloud Services (Web/Worker Roles) i Azure Websites. W usługach Azure Cloud Services po przesłaniu certyfikatu za pośrednictwem portalu zarządzania i określeniu odcisku kciuka certyfikatu oraz zainstalowaniu lokalizacji we właściwościach roli, gdy rola zostanie wdrożona w maszynie wirtualnej, kontroler odpowiedzialny za to oprogramowanie automatycznie zainstaluje te certyfikaty automatycznie. To jest powód, dla którego powyższy kod działa w roli internetowej.

Na stronie internetowej musisz zrobić to sam. Niestety ze względu na ograniczenia bezpieczeństwa w witrynie Azure po prostu nie można zainstalować certyfikatu w magazynie certyfikatów. Aby pracować z certyfikatami, musisz dołączyć plik PFX certyfikatu wraz z kodem i pracować z tym plikiem certyfikatu. Nie można zainstalować certyfikatu w magazynie certyfikatów.

Niezależnie od niewielkiej pracy, jaką wykonałem w witrynie internetowej Azure i certyfikatach, stwierdziłem, że certyfikat działa tylko wtedy, gdy plik PFX znajduje się w folderze AppData. Możesz również napotkać błędy, takie jak CryptographicException: The system cannot find the file specified. Jeśli napotkasz ten błąd, ten wpis na blogu może być przydatny: http://blog.tylerdoerksen.com/2013/08/23/pfx-certificate-files-and-windows-azure-websites/

+0

O ile mogę powiedzieć, że są w 100% poprawne. Certyfikaty przesłane za pośrednictwem portalu nie są nawet instalowane w sklepie. Wygląda na to, że zostały załadowane do pamięci za pomocą innych środków podczas uruchamiania IIS. –

+2

Ta odpowiedź jest nieaktualna. Proszę zobaczyć odpowiedź S.Armstrong poniżej –

59

Używanie certyfikatów w witrynie Azure WebSite działa inaczej niż w lokalnej kopii usług IIS lub nawet podczas uruchamiania witryny sieci Web w trybie debugowania z programu Visual Studio. Krótko mówiąc, strona internetowa nie ma dostępu do magazynu certyfikatów w tradycyjnym tego słowa znaczeniu ... wszystko odbywa się w pamięci.

Po pierwsze, po przesłaniu certyfikatu za pośrednictwem portalu Azure należy dodać składanie (również za pośrednictwem portalu) o nazwie WEBSITE_LOAD_CERTIFICATES i ustawić wartość dla tego odcisku palca przesłanego certyfikatu. Może to być lista odseparowanych przecinkami wielu odcisków palców lub nawet * w celu załadowania wszystkich przesłanych certyfikatów. Przypuszczam, że to zmusza certyfikaty do załadowania do pamięci.

Aby następnie załadować swój certyfikat, można wykonać następujące czynności:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadOnly); 

var certs = store.Certificates.Find(X509FindType.FindByThumbprint, YOUR_THUMBPRINT, false); 

zmienić „false” na „true”, jeśli chcesz, aby upewnić się, że certyfikat jest ważny.

znalazłem tę informację tutaj, co wyjaśnia jej znacznie lepiej niż mam: http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/

+0

Dzięki! To działało jak urok! –

+1

Cholera. Spędzony jak 3 godziny. Nazwa mojego parametru była inna (nie WEBSITE_LOAD_CERTIFICATES).Dzięki –

+3

Po spędzeniu kilku dni, dowiedziałem się, że problem jest StoreLocation.CurrentUser nie StoreLocation.LocalMachine! – omeralper