apn_on_rails突然抛出sslv3警告证书被撤销

时间:2012-04-13 20:24:01

标签: ruby-on-rails-3 apple-push-notifications

Rails:3.0.5 Ruby:1.9.2 apn_on_rails:0.5.1

突然开始收到异常:“从apn_on_rails gem中撤消了”sslv3警告证书。但是,通知仍然会发送到设备,证书有效期至2013年。

重现:

  1. rails console。
  2. 为其中一个现有设备创建通知。

    not1 = APN :: Notification.create(:device_id => devices [0] .id,:sound => true,:badge => 1,:alert =>“Testing”)

  3. 执行APN::App.send_notifications。 (注意:APN :: Notification.send_notifications根本不发送任何通知,反过来调用APN :: App.send_notifications)

  4. 预期输出:要发送到设备的通知。没有抛出异常。

    实际输出:发送到设备的通知。抛出异常。下面的完整堆栈异常:

    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 个答案:

答案 0 :(得分: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?)代码检查全局证书,无论您是否已定义,它将检查“config / apple_push_develpment_certification.pem”并发送带有此证书的通知。

在我的情况下,我有这个文件“ config / apple_push_develpment_certification.pem ”,我还为我的iPhone和iPad应用程序添加了两个不同的证书,由两个configatron变量定义。因此,我遇到了证书撤销问题,我的通知也被发送到设备。

解决这个问题: 定义“configatron.apn.cert”以指向development.rb和production.rb文件中的新证书