连接到gateway.sandbox.push.apple时的SSL / TLS警报

时间:2012-07-05 19:07:25

标签: php iphone openssl apple-push-notifications

运行代码时

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert ECert.pem -key EKey.pem

我收到错误

5155:error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown:/SourceCache/OpenSSL098/OpenSSL098-44/src/ssl/s3_pkt.c:1102:SSL alert number 46
5155:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-44/src/ssl/s23_lib.c:182:

我试图重新开始并获得证书,我试图再次获得私钥,但如果有人可以给我建议如何解决这个问题会很棒。

2 个答案:

答案 0 :(得分:1)

警报46为certificate_unknown(来自RFC 5246, Section 7.2)。这意味着:

  

在处理证书时出现了一些其他(未指明的)问题,使其无法接受。

Apple拒绝您提供的客户凭据/证书。

另请参阅信息安全堆栈交换中的SSL Mutual authentication Fails


  

如何解决这个问题会很棒。

看起来您生成了自己的凭据。您应提供Apple接受的凭据。

我认为Apple开发者计划的目标之一是为您提供可接受的身份(其他人包括经常性收入流)。根据开发人员计划,Apple将验证签名请求并为您颁发这些类型的证书。

如果您想知道,我不认为您可以在这种情况下避开Apple开发人员计划。 (为了它的价值,我通常不同意开发者计划的要求,并且每年向我收取200美元来使用我的iOS设备和MacBook)。

答案 1 :(得分:0)

您可能需要添加-verbose。

首先告诉您的是,签署了签署了签署gateway.sandbox.push.apple.com的CA的CA的CA的根CA不在默认的openSSL捆绑包中。

在上述情况下,证书是:

i:/O=Entrust.net/OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Certification Authority (2048)

您可以从http://www.entrust.net/knowledge-base/technote.cfm?tn=8412获取并可以使用-CAfile *添加到上述命令。

一旦这样做,您应该能够建立正确的连接并在服务器证书上至少获得一个OK:

 Verify return code: 0 (ok)

DW传递。

*:你也可以作弊 - 只需添加-showcert;它为您提供服务器的证书;将其剪切并粘贴到server-cert.pem中并添加“-CAfile server-cert.pem”,openssl将不会在树上进一步验证它。