2012-04-13 3 views
1

Rails: 3.0.5 Рубина: 1.9.2 apn_on_rails: 0.5.1apn_on_rails внезапно бросает SSLv3 сертификат оповещения отозван

вдруг начал получать исключение: "сертификат SSLv3 оповещения отозвано" от apn_on_rails камня. Однако уведомления по-прежнему разосланы устройство и сертификаты действительны до 2013 года

Чтобы Репродуцировать:

  1. рельсы консоли.
  2. создать уведомление для одного из существующих устройств.

    not1 = APN :: Notification.create (: device_id => устройства [0] .id,: звук => верно,: знак => 1,: предупреждение => "Тестирование")

  3. Execute APN::App.send_notifications. (Примечание: APN :: Notification.send_notifications не совсем отправка любых уведомлений и в свою очередь, вызывает APN :: App.send_notifications)

Ожидаемый результат: Уведомление направляется в устройство. Исключение не было.

Фактический результат: Уведомление отправлено на устройство. Исключение брошено. Полный трассировки стека исключений ниже:

ruby-1.9.2-p0 > APN::App.send_notifications 
SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert certificate revoked 
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert certificate revoked 
    from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/libs/connection.rb:59:in `connect' 
    from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/libs/connection.rb:59:in `open' 
    from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/libs/connection.rb:23:in `open_for_delivery' 
    from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/app/models/apn/app.rb:48:in `send_notifications_for_cert' 
    from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/app/models/apn/app.rb:36:in `send_notifications' 

ответ

1

Как трассировки стека показывает - проблема была в /gems/apn_on_rails-0.5.1/lib/apn_on_rails/app/models/apn/app.rb

в App.rb, в методе метод self.send_notifications:

def self.send_notifications 
    apps = APN::App.all 
    apps.each do |app| 
     app.send_notifications 
    end 
    if !configatron.apn.cert.blank? 
     global_cert = File.read(configatron.apn.cert) 
     send_notifications_for_cert(global_cert, nil) 
    end 
end 

Примечание: (if !configatron.apn.cert.blank?) код проверки для глобального сертификата, есть ли у вас определенные это или нет, он будет проверять «конфигурации/apple_push_develpment_certification.pem» и отправить уведомление с этим сертификатом.

В моем случае, я имел этот файл «конфиг/apple_push_develpment_certification.pem» и я также добавить два различных сертификата для моего iPhone и IPad и приложения определяется двумя переменными configatron. Поэтому я столкнулся с проблемой отзыва сертификата, а также мои уведомления были отправлены на устройства.

Чтобы это исправить: определить «configatron.apn.cert», чтобы указать на новый сертификат в development.rb и production.rb файлов

Смежные вопросы