ios 推送通知-原因:java.io.IOException:toDerInputStream拒绝标记类型45

o2gm4chl  于 2023-07-01  发布在  iOS
关注(0)|答案(3)|浏览(138)

当我的服务器尝试根据设备令牌和ck.pem(.pem文件,证书和密钥之间的组合)将通知推送到特定设备时,我遇到了此错误。

Caused by: java.io.IOException: toDerInputStream rejects tag type 45

这是完整的错误信息出现在我的eclipse控制台。

initial
starting push notification sending
2014/03/20 14:28:00:252 INFO  net.penril.notification.Initializer: ====Start Push Notification Sending==== 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2014/03/20 14:28:04:737 INFO  net.penril.notification.Initializer: Total of record data(1)
SMS OID: 465
IOS test
reg id =x769571d187c15cec398c5a02f196249456e8b73f763754fa17060658f87f6f6
com.notnoop.exceptions.InvalidSSLConfig: java.io.IOException: toDerInputStream rejects tag type 45
2014/03/20 14:28:05:374 INFO  net.penril.notification.Initializer: Failed send notification to APN 
2014/03/20 14:28:05:374 INFO  net.penril.notification.Initializer: ====Complete Push Notification Sending==== 
2014/03/20 14:28:05:374 INFO  net.penril.notification.Initializer: =====End===== 

starting..
    at com.notnoop.apns.internal.Utilities.newSSLContext(Utilities.java:101)
    at com.notnoop.apns.ApnsServiceBuilder.withCert(ApnsServiceBuilder.java:170)
    at com.notnoop.apns.ApnsServiceBuilder.withCert(ApnsServiceBuilder.java:133)
    at net.penril.notification.Initializer.notificationWorker(Initializer.java:156)
    at net.penril.notification.Initializer.Initial(Initializer.java:46)
    at net.penril.notification.PushNotificationCron$Job.run(PushNotificationCron.java:12)
    at EDU.oswego.cs.dl.util.concurrent.ClockDaemon$RunLoop.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.io.IOException: toDerInputStream rejects tag type 45
    at sun.security.util.DerValue.toDerInputStream(DerValue.java:847)
    at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1221)
    at java.security.KeyStore.load(KeyStore.java:1214)
    at com.notnoop.apns.internal.Utilities.newSSLContext(Utilities.java:85)
    ... 7 more

我怀疑这个错误是由这个代码引起的

System.out.println("reg id =" + record.getRegId());
ApnsService service = APNS.newService().withCert("/Applications/MAMP/htdocs/xxxxx-mobile/ck.pem", "xxxxxx").withSandboxDestination().build();
String payload = APNS.newPayload().alertBody("This for testing").build();
String token = record.getRegId();
service.push(token, payload);

你对这个toDerInputStream rejects tag type 45有什么想法吗?
我已经在这里做了关于这个问题的研究:

  1. https://community.oracle.com/thread/1534340?start=0&tstart=0
  2. Java APNS (Apple Push Notification Service) error
    为什么?
5lwkijsr

5lwkijsr1#

如前所述,here java-apns需要.p12私钥,而不是.pem文件。
在mac上创建.p12文件的说明在第一个链接中,但是如果你在linux上使用openssl工具,你可以使用以下命令创建它:

openssl pkcs12 -export -inkey mykey.key -in mykey.pem -out mykey.p12
swvgeqrz

swvgeqrz2#

我刚刚找到答案了。当我尝试生成P12密钥时,我需要同时选择私钥和密钥链访问中的证书。

aydmsdu9

aydmsdu93#

你可以在Windows上做你的问题如下。以管理员身份运行CMD,进入打开SSL的bin文件夹。然后运行下面的代码。
openssl pkcs12 -export -inkey C:\private.key -in C:\certificate.crt-out C:\key.p12 -passout通过:- 名称“My_ECC_Key”
我假设您在编写上述代码时已经获得了private.key和certificate.crt文件。

相关问题