我们在Windows上成功运行了基于IdentityServer4的STS,其中签名凭据已安装到本地计算机上,.pfx位于个人证书下,.cer位于受信任的人员证书下。然后,我们可以通过其通用名称加载签名凭据,如下所示:
我们现在想要在Docker容器中运行我们的STS实现,但是遇到了以下异常:
services.AddIdentityServer()
.AddSigningCredential("CN=CERT_NAME")
...
我们现在想要在Docker容器中运行我们的STS实现,但是遇到了以下异常:
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)
根据上述错误信息和我们在此处使用的AddSigningCredential方法的源代码:https://github.com/IdentityServer/IdentityServer4/blob/ec17672d27f9bed42f9110d73755170ee9265116/src/IdentityServer4/Configuration/DependencyInjection/BuilderExtensions/Crypto.cs#L73,显然我们的问题是IdentityServer4正在寻找本地计算机的个人(“我的”)存储中的证书,但是Unix环境中没有这样的存储,因此会出现错误消息。
因此,我很想知道是否存在一些最佳实践,用于在Docker容器中加载IdentityServer4的签名凭据,如果无法按名称或指纹加载它。唯一的选择是将证书捆绑到我们的应用程序中,然后按文件名加载吗?