2016-12-15 50 views
3
var rawData = Convert.FromBase64String(_signingKey); 
var cng = CngKey.Import(rawData, CngKeyBlobFormat.Pkcs8PrivateBlob); 

我用這段代碼從嵌入的base64字符串中提取密鑰。 它的工作原理,當我在本地測試正常,但當我在Azure上發佈我得到以下異常:CngKey.Import azure

WindowsCryptographicException: The system cannot find the file specified 

(再一次我沒有從任何文件讀取) 我需要這個蘋果APNS推送溝通通知,是否有任何解決方法? 這隻發生在免費服務計劃,如果我切換到它的基本計劃工作。

+0

也許這是相關的 「我想到的一件事是你的應用程序池的身份,確保Load用戶配置文件打開,否則crypto susbsystem不起作用。」 [http://stackoverflow.com/questions/14263457/x509-certificate-not-loading-private-key-file-on-server](http://stackoverflow.com/questions/14263457/x509-certificate-不加載私人密鑰文件服務器) – skjelland

+0

@Vladimir你有沒有找到這個問題的解決方案? – lehn0058

回答

1

看來,它是由您的Azure移動應用程序中沒有附加證書引起的。如果是這種情況,我們需要將"Development" or "Distribution" SSL certificate上傳到WebApp。有關如何將推送通知發送到iOS App的更多信息,請參閱azure document

enter image description here

+0

但我沒有使用任何蔚藍服務的通知,我使用蘋果的http/2端點,我寫了自定義代碼發送通知,它的工作時,我測試它本地 –

1

我也曾有過類似的錯誤嘗試從字節數組構造一個X509Certificate2 - 精細本地工作,但一旦我部署到Azure的Web應用程序,我未發現異常一樣,非常誤導的文件。

真正的問題是沒有與Web服務帳戶關聯的用戶存儲。如果在Windows上訪問證書存儲時存在與權限相關的錯誤,您也可能會收到類似的錯誤。在我的情況下,我通過使用MachineKeySet修復了這個問題: new X509Certificate2(certRawBytes,default(string),X509KeyStorageFlags.MachineKeySet);

所以,在你的情況下,你可以試試:

var keyParams = new CngKeyCreationParameters 
{ 
    KeyCreationOptions = CngKeyCreationOptions.MachineKey, 
}; 
CngKey.Create(CngAlgorithm.Rsa, keyName, keyParams); 

注意:您可能需要設置幾個參數,以獲得上述工作。導入方法似乎不支持MachineKey - 但您應該能夠通過使用Create方法實現類似的結果。

+0

但我有字節數組,這是我的實際關鍵,如何才能用創建方法實現類似的結果 –