我已经为我的应用程序开发了推送通知,它运行正常。当我生成生产(分发)的.p12文件时,它正在创建。在服务器上部署.pem文件后,它正在抛出并发生错误。
OpenSSL :: SSL :: SSLError(SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器s 激情票A:sslv3警报证书未知):“}
服务器:RoR(Ruby on Rails) 任何帮助都会非常明显。
注意: 对于开发.p12,它运行正常。问题是我正在部署分发.p12。请建议我可能遗漏的内容。
谢谢和问候
答案 0 :(得分:7)
在您的服务器代码中查看
gateway.push.apple.com,分发端口2195
gateway.sandbox.push.apple.com,端口2195
8.打开终端并将目录更改为用于保存.p12的位置,并使用此命令将PKCS12证书包转换为PEM格式
i)中。 openssl pkcs12 -clcerts -nokeys -out apns-cert.pem -in apns-cert.p12 ⅱ)。 openssl pkcs12 -nocerts -out apns-key.pem -in apns-key.p12 在这里你必须提供一些访问PHP代码的密钥。
删除密码短语
ⅲ)。 openssl rsa -in apns-key.pem -out apns-key-noenc.pem 在这里你必须为删除密码提供相同的密钥。
最后 ⅳ)。 cat apns-cert.pem apns-key-noenc.pem> APNS-dev.pem。
现在您可以在ApnsPHP中使用此PEM文件作为证书!
答案 1 :(得分:3)
@Learner
如果所有其他选项都不起作用,那么您应该检查导出p12文件的方式。您应该导出与Apple生产证书相关联的p12文件,我希望它能正常工作..因为它对我有用!!!
答案 2 :(得分:1)
如果您想跳过验证,可以使用此功能。
require 'net/http'
require 'openssl'
class Net::HTTP alias_method :origConnect, :connect
def connect
@ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
origConnect
end
end
来源:How to get rid of OpenSSL::SSL::SSLError
但是既然我们想要安全,你应该使用以下
ENV['SSL_CERT_DIR'] = '/usr/share/ca-certificates/'
答案 3 :(得分:0)
我解决了。这是一个.p12文件错误。我没有创建我必须使用的.p12。
谢谢!
答案 4 :(得分:0)
我正在使用 gem'rpush',它从凭证文件夹中获取了pem文件&将其存储在数据库中。我的解决方案是在更新我的凭证文件夹中的pem文件后,从数据库和重新生成的记录中删除所有旧的Rpush :: Apns :: App记录。
app = Rpush::Apns::App.new
app.name = "ios_app"
app.certificate = File.read("/path/to/sandbox.pem")
app.environment = "sandbox" # APNs environment.
app.password = "certificate password"
app.connections = 1
app.save!
n = Rpush::Apns::Notification.new
n.app = Rpush::Apns::App.find_by_name("ios_app")
n.device_token = "..." # 64-character hex string
n.alert = "hi mom!"
n.data = { foo: :bar }
n.save!