2017-04-07 16 views
7

Kimlik Doğrulama Kimlik Bilgileri, Kişisel Kimlik Sertifikaları ve Kişisel Bilgiler altında .pfx ile Yerel Bilgisayara yüklendiği Windows üzerinde başarıyla çalışan bir IdentityServer4 tabanlı STS'ye sahibiz. Güvenilir Kişiler> Sertifikalar altında. şöyle Sonra onun Ortak İsme Göre İmzalama Kimlik Bilgilerini yükleyebiliyorsanız:IdentityServer4: Docker'da Cert Store'dan Kimlik Bilgilerini Kaydetme nasıl yapılır

services.AddIdentityServer() 
    .AddSigningCredential("CN=CERT_NAME") 
    ... 

Biz şimdi Docker kapsayıcı içindeki bizim STS uygulamasını çalıştırmak isteyen vardır ve aşağıdaki istisna haline çalışan edilmiştir:

Unhandled Exception: System.PlatformNotSupportedException: Unix LocalMachine X509Store is limited to the Root and CertificateAuthority stores. 
    at Internal.Cryptography.Pal.StorePal.FromSystemStore(String storeName, StoreLocation storeLocation, OpenFlags openFlags) 
    at System.Security.Cryptography.X509Certificates.X509Store.Open(OpenFlags flags) 
    at IdentityModel.X509CertificatesFinder.Find(Object findValue, Boolean validOnly) 
    at Microsoft.Extensions.DependencyInjection.IdentityServerBuilderExtensionsCrypto.AddSigningCredential(IIdentityServerBuilder builder, String name, StoreLocation location, NameType nameType) 

Yukarıdaki hata iletisine ve burada kullandığımız AddSigningCredential yönteminin kaynağına dayanarak şu adresi kullanıyoruz: https://github.com/IdentityServer/IdentityServer4/blob/ec17672d27f9bed42f9110d73755170ee9265116/src/IdentityServer4/Configuration/DependencyInjection/BuilderExtensions/Crypto.cs#L73, sorunumuzun IdentityServer4 yerel makinenin Kişisel ("Benim") deposundaki sertifikayı aradığı anlaşılıyor gibi görünüyor. Ancak, böyle bir mağaza hata mesajına göre Unix ortamlarında mevcut değildir.

Bu yüzden, ad veya parmak izi ile yüklenememesi durumunda, Docker kapsayıcılarında Kimlik Kimlik Bilgisi Kimlik Bilgilerinin Kimlik Bilgileri'nin yüklenmesi için bazı en iyi uygulamaların mevcut olup olmadığını bilmek istiyorum. Sertifikayı başvurumuzla birlikte paketlemenin tek yolu daha sonra dosya ismine göre yüklemek mi?

Sunduğunuz her türlü yardım için teşekkür ederiz!

+1

Merhaba Sean bu sorunu çözmüş deposundan sertifika almak için kod aşağıdaki kullanabilir miyim? – xszaboj

+0

@xszaboj .NET Core 2'de (en azından CurrentUser \ My için) uygulandığı görülüyor, bkz. Https://github.com/aspnet/DataProtection/issues/125. LocalMachine \ My değil – Bidou

cevap

0

Ben pencereleri makinede geliştiriyorum ve ben

X509Certificate2 cert = null; 

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

X509Certificate2Collection certCollection = certStore.Certificates.Find(
         X509FindType.FindByThumbprint, 
         "‎thumbprint", 
         false); 
if (certCollection.Count > 0) 
    { 
     cert = certCollection[0]; 
     Log.Logger.Information($"Successfully loaded cert from registry: {cert.Thumbprint}"); 

    } 
    if (cert == null) // Fallback 
    { 
     cert = new X509Certificate2(Path.Combine(_env.ContentRootPath, "certificate.pfx"), "password"); 
     //Log.Logger.Information($"Falling back to cert from file. Successfully loaded: {cert.Thumbprint}"); 
    } 
    else 
    { 
     certStore.Dispose(); 
    } 
İlgili konular