一段时间以来,我们已经在Azure应用服务上运行了ASP.NET Core Web应用。作为升级到netcoreapp2.2的一部分,我们决定对其进行Dockerize并在仍在应用程序服务中的Linux容器上运行它。
此应用程序要做的一件事就是加载TLS证书以进行令牌签名。以前,此证书已上传到应用程序服务,应用程序可以通过指纹在new X509Store(StoreName.My, StoreLocation.CurrentUser)
中找到它。可以通过添加配置设置WEBSITE_LOAD_CERTIFICATES
并将其值设置为证书的指纹来启用此功能。
使用Linux容器尝试了相同的方法,我们发现证书存储中不存在该证书。
我在今年早些时候发现了this issue on Github,这表明在Linux上是不可能的。还是这样吗?如果是这样,是否有人知道不涉及将证书本身存储在映像中的变通方法?
该功能现在可以在Linux上使用。
Load certificate in Linux apps
WEBSITE_LOAD_CERTIFICATES应用程序设置使指定的证书可作为文件供Linux托管应用程序(包括自定义容器应用程序)访问。这些文件位于以下目录中:
- 私人证书-/ var / ssl / private(.p12文件)
- 公共证书-/ var / ssl / certs(.der文件)
证书文件名称是证书指纹。以下C#代码显示了如何在Linux应用程序中加载公共证书。
using System; using System.Security.Cryptography.X509Certificates; var bytes = System.IO.File.ReadAllBytes("/var/ssl/certs/<thumbprint>.der"); var cert = new X509Certificate2(bytes);