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

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

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

Это исключение создается внутренне и попадает в бесконечный цикл:

введите описание изображения здесь

Он помещается в строку 539 файла ApplePushChannel.cs:

    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 Output:

...
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)

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

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

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

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?


person Can Poyrazoğlu    schedule 27.04.2014    source источник


Ответы (6)


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

person Can Poyrazoğlu    schedule 28.04.2014
comment
Спасибо, я только что заново сделал сертификат и все заработало! Хотя я не думаю, что это проблема с PushSharp, я думаю, что что-то пошло не так в очень сложном процессе создания этих сертификатов. Так что начало нового, казалось, исправило это. - person rich97; 11.08.2014
comment
@ rich97 в этом процессе определенно есть какие-то ошибки, будь то на стороне Apple или PushSharp. - person Can Poyrazoğlu; 11.08.2014
comment
Я просто подумал, что мне стоит поделиться своим опытом. Однажды может кому-нибудь помочь. - person rich97; 12.08.2014
comment
Этот. Этот. Этот. Вся документация говорит вам экспортировать оба элемента, а затем это не удается. Зря потратил на это часы и часы. Спасибо @ CanPoyrazoğlu. - person Dean Thomas; 06.10.2014
comment
Я также потратил на это час, прежде чем попробовать ваше предложение об экспорте только закрытого ключа (без сертификата). Изменение устранило проблему! - person Bishbulb; 20.10.2014
comment
По какой-то причине экспорт обоих элементов работает с php в Mac, но не работает на сервере C #. Он заработал, используя только закрытый ключ. - person Alex Terreaux; 22.10.2014
comment
Хотел бы я проголосовать больше одного раза! У нас был сценарий ruby, который мог отправлять уведомления с информацией о сертификате, которая не работала с PushSharp. Я прокомментировал здесь github.com/Redth/PushSharp/issues/527 на всякий случай в документацию необходимо внести изменения - person Paul D'Ambra; 11.09.2015
comment
как ни странно, экспортированный сертификат (без закрытого ключа) у меня работает только так. code.google.com/archive/p/apns-sharp/ вики / - person ajay_nasa; 08.02.2016
comment
@ CanPoyrazoğlu Где вы регенерировали файл p12 (без закрытого ключа) на компьютере Mac? Я пытаюсь использовать Windows-машину, но не могу решить проблему. было бы хорошо, если бы вы упомянули шаги. Спасибо - person Rashmin Javiya; 27.10.2016
comment
@RashminJaviya Я регенерировал файл P12 с помощью Keychain Access на компьютере Mac. Я думаю, что в Windows certmgr.msc (введите в меню «Пуск» - ›Выполнить) - подойдет. - person Can Poyrazoğlu; 27.10.2016
comment
Еще одна информация о том, что при экспорте только закрытого ключа у меня работает PushSharp. - person Jon Sagara; 09.12.2016
comment
Я просто использовал закрытый ключ сертификата при экспорте, и это сработало. В моем случае регенерация не требуется. Спасибо за ответ. - person NeverHopeless; 10.03.2017
comment
Спасибо, ты сэкономил мне время - person Vineesh TP; 07.04.2017
comment
это работает локально, но не работает в Azure - мне удалось запустить код OP, загрузив сертификат, как предлагает @Pavel Chuchuva - см. мой комментарий (если ссылка не работает, скопируйте его и вставьте в браузер): stackoverflow.com/questions/23329040/ - person Andrzej Martyna; 25.10.2018
comment
Привет, @ CanPoyrazoğlu, после того, как я попробовал исключение из вашего решения, исчезло, но я не получал уведомления. Вы можете что-нибудь посоветовать? - person Simba; 12.02.2019
comment
@Shahzad, что это за среда? можно ли отправлять уведомления с тем же сертификатом другим способом, чтобы проверить, работает ли он? - person Can Poyrazoğlu; 13.02.2019
comment
@ CanPoyrazoğlu Приносим извинения за поздний ответ. Его windows server 2012. Парень с ios проверил со своей стороны, он работал нормально, он отправляет уведомление. - person Simba; 22.02.2019
comment
Я тоже потратил впустую свои дни, пытаясь понять это, и ничего не работало. Кто-нибудь знает причину этого? - person Ashutosh Shukla; 03.04.2019
comment
У меня сейчас такая же проблема. Отлично работает локально, но когда я загружаю его на веб-серверы (сервер Windows), он больше не отправляет уведомления, и я получаю ту же ошибку. Учетные данные, представленные в пакете, не были распознаны. Прошло два дня. Это было невероятно неприятно! - person Cory; 22.05.2020

Исключение «Учетные данные, предоставленные для пакета, не были распознаны» обычно указывает на то, что у пользователя, запускающего код, недостаточно прав.

Если вы отправляете push-уведомления из веб-приложения Azure или веб-задания, не загружайте сертификат APNS из файла или строки в кодировке base64. Перейдите на портал Azure и вместо этого добавьте сертификат на веб-сайт. Обратите внимание на отпечаток большого пальца.

сертификат на портале Azure

Затем добавьте параметр 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);

использованная литература

person Pavel Chuchuva    schedule 19.07.2016
comment
Этот ответ мне помог, но с некоторыми изменениями. Теперь с новым порталом Azure вы можете добавить сертификат в службу приложений / настройки SSL / частные сертификаты (.pfx) / загрузить сертификат. Интересно то, что вам не нужно изменять код, который использовал OP (stream.AuthenticateAsClient), поэтому вам не нужно беспокоиться о эскизе или коде в этом ответе. Старый код начнет работать сразу после загрузки сертификата плюс, конечно, WEBSITE_LOAD_CERTIFICATES. Печально то, что вам нужен платный план (по крайней мере, базовый) для загрузки любого сертификата. - person Andrzej Martyna; 25.10.2018

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

person Jeroen Visscher    schedule 21.01.2016
comment
Я получил эту ошибку в своей производственной среде (при разработке она работала). Восстановить сертификат не удалось. Приведенный здесь ответ - да. - person Jeroen Visscher; 22.01.2016

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

person chedabob    schedule 15.02.2017

Я испытывал это снова и снова.

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

person Moshe L    schedule 22.02.2017

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

Щелкните правой кнопкой мыши сертификат в mmc -> All Tasks -> Manage Private Keys ... Я добавил NETWORK SERVICE, потому что пул приложений iis моего веб-приложения использовал эту учетную запись.

См. Дополнительные сведения: http://blog.falafel.com/apple-push-notifications-certificates-and-iis/

person BIKTOP    schedule 25.01.2016