我在共享应用服务计划上有一个Azure Function应用程序,我不想通过Azure门户导入我的证书。这是因为这个应用服务计划是在组织内共享的,这些证书是我想要确定的客户端证书,我是唯一能够访问它们的人。
所以我使用功能应用程序设置导入它们(我将它们移动到Vault以获得更高的安全性)。
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);
但连接拒绝错误“提供给包的凭据无法识别”。
我试了几件事
如果从pfx文件或包含私钥的cert编码设置X509Certificate2
实例,则可能遇到CryptographicException:系统找不到指定的文件。
原因是Windows将私钥存储为用户配置文件目录下的文件。默认情况下,Azure Web App(AppService)不会加载用户配置文件(避免在不需要的情况下的大多数情况下的开销)。因此,系统找不到指定的文件。问题。要解决此问题,请将以下appSetting设置为启用用户配置文件。
WEBSITE_LOAD_USER_PROFILE = 1
通过设置应用程序设置WEBSITE_LOAD_USER_PROFILE = 1
,Azure网站将加载给定应用程序的用户配置文件,因此应用程序可以从PFX文件加载证书。
参考文献: