我在共享应用程序服务计划中有一个Azure Function应用程序,并且我不想通过Azure门户导入证书。这是因为此应用程序服务计划在组织内部共享,并且这些证书是客户证书,我想确保我是唯一能够访问它们的人。
因此,我使用“功能”应用程序设置导入了这些文件(并且为了确保更高的安全性,我将它们移至保险柜)。
byte[] bytearray; // PFX file, imported from settings using base64 encoding
string password; // Imported from settings
certificates = new X509Certificate2Collection();
certificates.Import(bytearray, password, X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.PersistKeySet);
使用它们就像这样
var handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
foreach (var cert in certificates)
handler.ClientCertificates.Add(cert);
但是连接拒绝并显示错误“无法识别提供给软件包的凭据”。
我尝试了几件事
答案 0 :(得分:3)
如果您是从pfx文件或包含私钥的证书编码中设置X509Certificate2
实例,则可能会遇到 CryptographicException :系统找不到指定的文件。
原因是Windows将私钥作为文件存储在用户配置文件目录下。默认情况下,Azure Web App(AppService)不会加载用户配置文件(避免在不需要该配置文件的大多数情况下产生开销)。因此,系统找不到指定的文件。问题。要解决此问题,请将以下appSetting设置为启用用户个人资料。
WEBSITE_LOAD_USER_PROFILE = 1
通过设置应用程序设置WEBSITE_LOAD_USER_PROFILE = 1
,Azure网站将为给定应用程序加载用户配置文件,因此应用程序可以从PFX文件加载证书。
参考文献: