web-dev-qa-db-ja.com

プッシュ通知-原因:Java.io.IOException:toDerInputStreamはタグタイプ45を拒否します

サーバーがデバイストークンと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=
  2. Java APNS(Appleプッシュ通知サービス)エラー

どうして?

9
Mohammad Nurdin

私はちょうど答えを見つけました。 P12キーを生成しようとすると、キーチェーンアクセスで秘密キーと証明書の両方を選択する必要があります。

enter image description here

4
Mohammad Nurdin

述べたように ここ Java-apnsは、.pemファイルではなく.p12秘密鍵を期待しています。

Macで.p12ファイルを作成する手順は最初のリンクにありますが、Linuxでopensslツールを使用している場合は、次の方法で作成できます。

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