iOS Push-уведомления AuthenticationException для сертификата

Я пытаюсь использовать PushSharp для отправки push-уведомления моему приложению. У меня есть две учетные записи Apple... одна обычная учетная запись, а другая корпоративная. У меня есть сертификат разработчика в обычной учетной записи, который работает, но мои сертификаты разработки и распространения не работают в учетной записи Enterprise. Я получаю исключение аутентификации..

A call to SSPI failed, see inner exception.

Inner Exception:
[System.ComponentModel.Win32Exception]: {"An unknown error occurred while processing the certificate"}

Это происходит в этом коде PushSharp (я не комментировал строку):

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);
}

Вот код из моего тестового проекта:

public static void SendPingToApple()
{
    try
    {
        var devicetoken = "mytoken";
        var appleCert = File.ReadAllBytes(AssemblyPathName + @"\Resources\DistPrivKey1.p12");
        var push = new PushBroker();
        push.RegisterAppleService(new ApplePushChannelSettings(IsProduction, appleCert, "password"));

        push.QueueNotification(new AppleNotification()
            .ForDeviceToken(devicetoken.ToUpper())
            .WithAlert("Test Notification"));

            push.StopAllServices();
    }
    catch (Exception ex)
    {
        throw;
    }
}

person Millie Smith    schedule 21.02.2014    source источник
comment
Вы пытались подключиться к службе apns с помощью openssl и корпоративного сертификата? Сначала убедитесь, что нет проблем с вашим сертификатом.   -  person Nilesh    schedule 22.02.2014
comment
Нет? Мне не сразу понятно, как это сделать. Можете ли вы уточнить?   -  person Millie Smith    schedule 22.02.2014
comment
Вы должны выполнить эту команду: openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourSSLCertAndPrivateKey.pem -debug -showcerts -CAfile Entrust.net Certification Authority (2048).pem Обновите URL-адрес в зависимости от того, какой сертификат вы используете. Если не удается подключиться, проблема связана с вашим сертификатом или конфигурацией сети.   -  person Nilesh    schedule 22.02.2014
comment
Мне не удается загрузить файл закрытого ключа сертификата клиента 5793: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет стартовой строки:/SourceCache/OpenSSL098/OpenSSL098-47.1/src/crypto/pem/pem_lib.c:648:Ожидается: ЛЮБОЙ ЧАСТНЫЙ КЛЮЧ   -  person Millie Smith    schedule 22.02.2014
comment
Я могу использовать этот сертификат для создания приложения и его развертывания через MDM.   -  person Millie Smith    schedule 22.02.2014
comment
Вы уверены, что преобразовали свои сертификаты в формат pem и указали правильный путь? Если нет, см. этот вопрос: stackoverflow.com/questions/9497719/   -  person Nilesh    schedule 22.02.2014


Ответы (1)


Преобразуйте свои ssl-сертификаты в формат pem, используя следующие команды.

    openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem

    openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem

Затем выполните следующую команду, чтобы убедиться, что нет проблем с вашим сертификатом или сетевым подключением.

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourSSLCertAndPrivateKey.pem -debug -showcerts -CAfile "Центр сертификации Entrust.net (2048).pem"

Вы должны загрузить сертификат Entrust и преобразовать его в pem, поскольку сертификаты APNS подписаны Entrust.

person Nilesh    schedule 22.02.2014
comment
Хорошо @Нилеш. Я не думаю, что использовал сертификат APNS. Я сгенерировал один и загрузил сертификат Entrust (который был загружен как .cer.txt), но не могу заставить его работать. Я не уверен, что использую правильный закрытый ключ (я не уверен, где взять закрытый ключ для моего сертификата APNS). - person Millie Smith; 24.02.2014
comment
Спасибо за помощь, Нилеш. Ваш ответ показал мне, что мои сертификаты недействительны. По какой-то причине мне пришлось создать новый CSR для сертификата APNS. В противном случае сертификат APNS не имел связанных с ним ключей в цепочке ключей. Выполнение этого и экспорт p12 для PushSharp сработало. - person Millie Smith; 24.02.2014