Mamy STS działający w oparciu o IdentityServer4, działający z powodzeniem w systemie Windows, w którym Poświadczenie podpisu zostało zainstalowane na komputerze lokalnym z .pfx w sekcji Osobiste> Certyfikaty i .cer w obszarze Zaufani ludzie> Certyfikaty. Jesteśmy wtedy w stanie załadować poświadczenia podpisanie przez swoją nazwą zwyczajową, co następuje:IdentityServer4: Jak załadować podpisywanie poświadczeń z magazynu certyfikatów, gdy jest w Docker
services.AddIdentityServer()
.AddSigningCredential("CN=CERT_NAME")
...
Jesteśmy teraz chce uruchomić naszą realizację STS w pojemniku Docker i zostały uruchomione w następującym wyjątkiem:
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)
W oparciu o powyższy komunikat o błędzie i źródło metody AddSigningCredential, której używamy tutaj: https://github.com/IdentityServer/IdentityServer4/blob/ec17672d27f9bed42f9110d73755170ee9265116/src/IdentityServer4/Configuration/DependencyInjection/BuilderExtensions/Crypto.cs#L73, wydaje się oczywiste, że naszym problemem jest to, że IdentityServer4 szuka certyfikatu w magazynie osobistym komputera lokalnego ("My") jednak taki magazyn nie jest dostępny w środowiskach Unix zgodnie z komunikatem o błędzie.
Ciekawe, czy istnieje jakaś dobra praktyka w celu załadowania Poświadczenia logowania dla IdentityServer4 w kontenerach Docker, jeśli nie można załadować go według nazwy lub odcisku palca. Czy jedyną opcją byłoby powiązanie certyfikatu z naszą aplikacją, a następnie załadowanie go według nazwy pliku?
Dzięki za pomoc, jaką możesz zaoferować!
Cześć Sean pan rozwiązać ten problem? – xszaboj
@xszaboj Wydaje się, że jest zaimplementowany w .NET Core 2 (przynajmniej dla CurrentUser \ My), zobacz https://github.com/aspnet/DataProtection/issues/125. Nie dotyczy to LocalMachine \ My – Bidou