Pushsharp APNS production: учетные данные, поставляемые в пакет, не были признаны (разработка работает нормально, хотя)

мое приложение только что готово к продаже в App Store, но ни одно из моих производственных устройств (устройств, которые установили приложение из App Store) не получает push-уведомлений. Когда я пытаюсь отправить push-уведомление на производственное устройство, я получаю эту ошибку:

"The credentials supplied to the package were not recognized" 
(System.ComponentModel.Win32Exception)

это исключение внутренне брошено и поймано в бесконечный цикл:

enter image description here

бросается на строку 539 из :

    try
{
    stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, 
        System.Security.Authentication.SslProtocols.Ssl3, false);
    //stream.AuthenticateAsClient(this.appleSettings.Host);
}
catch (System.Security.Authentication.AuthenticationException ex)
{
    throw new ConnectionFailureException("SSL Stream Failed to Authenticate as Client", ex);
}

это выход приложение в выводе Visual Studio:

...
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
...(it keeps getting thrown until I stop it manually)

вот что я пробовал:

  • проверил, что ID устройства я пытаюсь зарегистрирован с производства маркер устройства.
  • отозван и восстановлен производственный сертификат APNS, экспортирован с закрытым ключом в новый .p12 file, и попробовал снова с новым сертификатом. (У меня была такая же проблема с уведомлениями о разработке, и это решило мою проблема)
  • изменен протокол SSL с Ssl3 to Tls. (несколько дней назад возникла проблема с версией протокола, и она временно исправила проблему. Не должно быть необходимости в этом, но ошибка, которую я получаю, такая же, как и та, которую я получал до этого)
  • проверено, что я фактически пытаюсь подключиться к производственному серверу с производственным сертификатом вместо сервера/сертификата разработки.
  • проверено, что я могу получить доступ сервер APNS напрямую (мой ASP.NET приложение живет внутри Parallels VM Windows 8.1 на моем Mac, вот вывод с моего Mac, просто чтобы избежать путаницы:

(выходной терминал ) Edit: я пинговал сервер песочницы, я пинговал производственный сервер, я проверяю, что я тоже могу подключиться к нему, поэтому это не проблема.

can$ sudo nmap -p 2195 gateway.sandbox.push.apple.com
Starting Nmap 6.40-2 ( http://nmap.org ) at 2014-04-28 00:06 EEST
Nmap scan report for gateway.sandbox.push.apple.com (17.149.34.189)
Host is up (0.49s latency).
Other addresses for gateway.sandbox.push.apple.com (not scanned): 17.149.34.187 17.149.34.188
PORT     STATE SERVICE
2195/tcp open  unknown

почему PushSharp не ведет переговоры с серверами APNS?

6 ответов


Я понял, проблема. Я снова отозвал и восстановил сертификат, и на этот раз я экспортировал только закрытый ключ (без сертификата). В Keychain access я экспортировал как .p12 и использовать новый файл и он работал. По какой-то причине PushSharp не играл хорошо с .p12 когда в файле присутствуют как сертификат, так и закрытый ключ.


исключение"учетные данные, предоставленные пакету, не были распознаны" обычно указывает, что у пользователя, выполняющего код, недостаточно разрешений.

при отправке push-уведомлений из Azure web app или webjob не загружайте сертификат APNS из файла или строки, закодированной в base64. Перейдите на портал Azure и добавьте сертификат на веб-сайт. Обратите внимание на отпечаток.

certificate in Azure Portal

далее добавить WEBSITE_LOAD_CERTIFICATES параметр и установить его в * (звездочка).

теперь сертификат APNS можно использовать из кода C#:

string thumbprint = "YOUR THUMBPRINT";
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certificate = store.Certificates.Find(
    X509FindType.FindByThumbprint, thumbprint, validOnly: false)
    .Cast<X509Certificate2>().SingleOrDefault();
var apnsConfig = new ApnsConfiguration(
    ApnsConfiguration.ApnsServerEnvironment.Production, certificate);

ссылки


ни один из ответов работал для меня. В конце концов я закончил тем, что импортировал сертификат и закрытый ключ в хранилище сертификатов Windows, а затем экспортировал как .pfx.


Я проверял его снова и снова.

преобразование до pem формат, и он будет работать с ограниченными пользователями IIS и, возможно, с Azure....


Я получал то же исключение, и в моем случае мне пришлось добавить разрешение для моего сертификата Push-сервисов IOS.

щелкните правой кнопкой мыши сертификат в mmc - > все задачи - > Управление закрытыми ключами... Я добавил сетевую службу, потому что пул приложений iis моего веб-приложения использовал эту учетную запись.

Подробнее см.:http://blog.falafel.com/apple-push-notifications-certificates-and-iis/


при использовании хранилища сертификатов windows (imho-самый простой способ управления сертификатами на рабочем сервере) обязательно установите правильные разрешения на закрытый ключ.