2014-04-17 9 views
9

Wenn ich versuche, Java APNS zur Verwendung der Push-Benachrichtigung auf iOS, bekam ich diese Fehlermeldung zu senden:Java-APNS-Zertifikatfehler mit "DerInputStream.getLength(): lengthTag = 109, too big."

com.notnoop.exceptions.InvalidSSLConfig: java.io.IOException: DerInputStream.getLength(): lengthTag = 109, zu groß.

Ich versuche bereits, das Zertifikat in Personal Information Exchange (.p12) zu konvertieren und den gleichen Fehler zu erhalten. Wer weiß zum Problem und wie löst man es?

Hier sind meine Java-Code:

ApnsService service = 
    APNS.newService() 
    .withCert("src/net/notification/ck.jks", "******") 
    .withSandboxDestination() 
    .build(); 

String payload = APNS.newPayload().alertBody(record.getSendMsg()).build(); 
String token = record.getToken(); 
service.push(token, payload); 

Dank.

+0

Um zu reproduzieren: '> keytool -list -keystore keystore.jks -storetype pkcs12' gibt' keytool Fehler: java.io.IOException: DerInputStream.getLength(): lengthTag = 109, too big.'. Stellen Sie sicher, dass Sie "-storetype" angeben, wenn Sie 'keytool' verwenden. –

Antwort

18

Dies tritt auf, weil das System denkt, dass Sie versuchen, eine andere Art von Keystore und nicht JKS zu lesen. Sie müssen angeben, dass die Datei JKS ist, oder in ein anderes Format konvertieren.

Ich sehe, dass Sie bereits versucht haben, zu .p12 zu konvertieren. Wenn Sie dies richtig gemacht haben, gibt es vielleicht ein anderes Standardformat. Ich empfehle, stattdessen herauszufinden, wie man JKS spezifiziert.

+1

Danke. Ich benutze Java App mit Embedded Jetty Server. TrustStoreType angeben: JKS hat das Problem beseitigt. – Goran

+0

Wer weiß, warum 'JKS' funktioniert und' PKCS12' nicht? –

+0

omg so einfach, ich wusste nicht, ich arbeite mit Jks und nicht pkcs12 ... – Betlista

9

Ich hatte das gleiche Problem, aber meine Lösung wird Ihnen nur helfen, wenn Sie maven verwenden.

Maven-Ressourcenfilterung (mit der Sie Variablen in Ihre Ressourcendateien aufnehmen können) kann Ihre Binärdateien durcheinander bringen - und Zertifikate sind besonders anfällig für Änderungen.

Im Allgemeinen sollte binärer Inhalt nicht gefiltert werden. Aber ich konnte nicht einfach die Ressourcenfilterung deaktivieren, da ich einige .properties-Dateien mit Variablen habe. Also die Lösung war auszuschließen .p12 Dateien von Filtern.

<build> 
    [...] 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <excludes> 
       <exclude>**/*.p12</exclude> 
      </excludes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <includes> 
       <include>**/*.p12</include> 
      </includes> 
     </resource> 
    </resources> 
    [...] 
</build> 

Mehr über Maven Ressource Filterung: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

+0

Vielen Dank SO VIEL! Ich habe mir stundenlang den Kopf dagegengeschlagen. –

2

Wenn Sie Maven verwenden, ist dies wahrscheinlich auftritt wegen der Maven-Filterung in Ihrem gesamten Ressourcen-Ordner. Ich habe versucht Zsolt Safrany Lösung oben und hat nicht funktioniert. Aber das Lesen der Dokumentation er teilte, ich habe dies gefunden:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>3.0.1</version> 
    <configuration> 
    <nonFilteredFileExtensions> 
     <nonFilteredFileExtension>p12</nonFilteredFileExtension> 
    </nonFilteredFileExtensions> 
    </configuration> 
</plugin> 

Welche binären Erweiterungen (oder eine Erweiterung, die Sie wollen) schließt aus gefiltert.