var rawData = Convert.FromBase64String(_signingKey);
var cng = CngKey.Import(rawData, CngKeyBlobFormat.Pkcs8PrivateBlob);
我使用此代码从嵌入式base64
字符串中提取密钥。
当我在本地测试时它工作正常,但是当我在azure上发布时,我得到以下异常:
WindowsCryptographicException: The system cannot find the file specified
(我再一次不读取任何文件) 我需要这个与苹果apns通信推送通知,有任何解决方法吗? 这种情况只发生在免费服务计划上,如果我切换到基本计划它正在工作。
答案 0 :(得分:2)
将现有应用程序发布到Azure后,我遇到了同样的错误。在我的情况下,我在App Services / App Name / Application Settings中设置WEBSITE_LOAD_USER_PROFILE = 1
后问题得以解决。
答案 1 :(得分:1)
它似乎是因为您的Azure移动应用中没有附加证书。如果是这种情况,我们需要将"Development" or "Distribution" SSL certificate上传到WebApp。有关如何向iOS App发送推送通知的更多信息,请参阅azure document。
答案 2 :(得分:1)
我尝试从字节数组构建X509Certificate2时出现了类似的错误 - 在本地工作正常但是一旦部署到Azure Web App,我就得到了相同且非常容易误导的文件未找到异常。
真正的问题是,没有与Web服务帐户关联的用户存储。如果在Windows上访问证书存储时存在与权限相关的错误,也会出现类似错误。
无论如何 - 在我的场景中,我使用MachineKeySet修复了问题: new X509Certificate2(certRawBytes,default(string),X509KeyStorageFlags.MachineKeySet);
所以,在你的场景中,尝试类似:
var keyParams = new CngKeyCreationParameters
{
KeyCreationOptions = CngKeyCreationOptions.MachineKey,
};
CngKey.Create(CngAlgorithm.Rsa, keyName, keyParams);
注意:您可能需要设置一些参数才能实现上述功能。 Import方法似乎不支持MachineKey - 但您应该能够通过使用Create方法获得类似的结果。
答案 3 :(得分:0)