如何使用ASP.Net在简单通知服务(SNS)上创建APNS平台应用程序?

时间:2016-09-23 11:37:42

标签: amazon-web-services

尝试使用.NET AWS SDK在SNS上创建APNS平台应用程序时遇到问题。

我有.p12证书,所以我能够在--- BEGIN CERTIFICATE ----和--- END CERIFICATE ------之间提取编码的base64字符串作为证书。然后我不知道如何从.p12证书中提取私钥(不是RSA私钥)。

创建ios平台应用程序时,我们需要传递PlatformPrincipal(证书)和PlatformCredential(私钥)属性。

我可以从X509Cerificate2.Rawdata属性中提取证书,但不知道获取私钥。

我直接传递cerificate和私钥编码的base64字符串,然后它正在查找并能够生成PlatformApplicationArn。但事实并非如此,我应该从.P12中提取这些凭据。

请帮助我。

 public string createAPNSPlatformApplication(string platform, string appName, string P12Password)
    {
        byte[] appleCert = null;
        string p12File = @"cert.p12";            
        try
        {
            appleCert = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.RelativeSearchPath, "P12\\" + p12File));
        }
        catch (Exception ex)
        {
            throw ex;
        }    
        // Load your certificate from file
        X509Certificate2 certificate = new X509Certificate2(appleCert, "password", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);            

        string certData = "-----BEGIN CERTIFICATE-----\n" + Convert.ToBase64String(certificate.RawData) + "\n-----END CERTIFICATE-----";
        bool flag = certificate.HasPrivateKey;

        string key = Convert.ToBase64String(certificate.Export(X509ContentType.Pkcs12, "Sparity123")); 

        Dictionary<string, string> dictionaryPlatformApplicationAtt = new Dictionary<string, string>();

        //dictionaryPlatformApplicationAtt.Add("PlatformPrincipal", "-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----");
        dictionaryPlatformApplicationAtt.Add("PlatformPrincipal", certData);
        dictionaryPlatformApplicationAtt.Add("PlatformCredential", "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC0cNX+ITZStS1v/6CJ7xBMK8YxpbGCXt4ylodWfE9AfyqfjSq00nzfjFC0ICTbPHJE/O7klZ7oYRtecwqBTlp8av1VUldWN0R1cQealdKCQtCkH03WcfUD+P4VRzncHlSBl+mx2V349/iOICMfz9lwMe1/enWEJsONNRlm4hxXSxF/gBRDYMwTLplodZkR1SnfZcPnR77/1vDY+UAWQFtFShG4Id8hrxHWXlnoB3HmpigBfJdgP9c+unYT+spxb6ZU11qsKr4qT8DBMQn/hxr4Rk2waktqJTx/A1ZHxQoFQH5XOONF+rOTAILN/Ap1/LihRsFPUp8DLMpY0hS+U4qLAgMBAAECggEBAKyJQHXRuCn5yErRueZqy8CqEseiUkwA/qKMwTh3gSiA8HbD+1QP+QuhFgJGwjdIY1OIL74vO1WklREJG8Bs9aUGgNq284AjNLi/ra+pFzMrRGnK7RjiupBj5EDgbHkIH3ITmohO+sZ4BhmQrUVb7+SSOTCuHfSRRGefoHx6NPNZ3xN2AyPUpf2tiZR8DgIHh5huwGKs71pCQwf8G0ID+vmQl5AKWPwo9oLLei1r2fZT1+pC0QppFmNpGYSqkOJTfY5W0bVf/JM5aSEQdS4e9qAHPNEFCt+OgZ0Hmvrzo3aL2jpSia/7u7VE53Hn4vCAoHRYPH36tC5cK30Qi3sXqoECgYEA4VE5FGNj2XxzlCDAzOf49qGZdkwlSCO0VjbC1H5HiisZml5MzWwvPF3dW6jEuXeEM6g5mGbkuj7iqJWw8RLcZIl0zKyctxeNebsBYhyqzz0JICucY1/cb1zM6vR6tw/7uePON62ZZbSgnKKAK2p1L3baOdBOMhqNjNQqg37TcKsCgYEAzQMssE4Xhr1QCJjfGe+ubGrU0kksRtaSoUI9VeBhV/R4BGA4yqqI9yyX+vvGGfQ+c5WWlL0h0eNGBkDbC5re2V7dkx7Ibdve8hFESwD73OGCXEa+SQTpLfQecpH0OUcv1PhxP1H+zea9Dc8QbaoI9z19l/dzZuYvk9L9wwXjDaECgYAnQjq61bKBI5ET3z0YttaHSpLtrMjWL/ptBy+dTL90UJwubH3fURlN4GEAZoCYfD2ZrpcSeeMinHBrxWFGL+4cymKCgxTvRfhNnIraKHqOj2j2pQKjwgErmjTOP3jeSrempQ26X9IZiYZupFXGus7eTUwqxKPLURsWzaT2snNu7wKBgQCU1hgsixVDac9f3nQiJULxTQHjBOKTLxZW4nsbDII/U6mKK70vTW2QXRydRwpEL3DjgxdGNqUF9sUQpycfnrjpAJlGRNPoBfcusGBvP3CapFF64pUk99690PwF23Z92vOb3x6AhOvC2iAolUptA0PtEwRKPojWjIi//i7i1jRH4QKBgDc952mfjZrMXP78Duy6bWqhtgCGK02jwTFk0NgAII2KIlT65Lj3gekxvYRNmeU8TW4know6YQm5OZ2Pyj9paJlkhvrE/t/cnn3hfVQkDbtL/iY7HuigupM2Z50EkWlu45Kzej+AO4J2/wSxlzGnHrOubtAfMrRv+dPSMqm8xKU0\n-----END PRIVATE KEY-----");
        var resp = client.CreatePlatformApplication(new CreatePlatformApplicationRequest()
        {                
            Attributes = dictionaryPlatformApplicationAtt,
            Name = appName,
            Platform = platform
        });
        return resp.PlatformApplicationArn;
    }

提前致谢。

0 个答案:

没有答案