尝试使用.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;
}
提前致谢。