2013-06-25 2 views
7

Ich habe Probleme mit einem generierten Zertifikat, das ich verwende, um eine Verbindung zu den Apple Push-Diensten herzustellen. alles funktioniert gut, wenn die erzeugte p12-Datei in meinem src/main/java-Ordner war, aber ich zog es nach src/main/resources und beschlossen, die Arbeit mit dem folgenden Fehler zu stoppen:generiertes Zertifikat funktioniert nicht mehr, wenn es in den Ressourcenordner verschoben wird

DerInputStream.getLength(): lengthTag=111, too big. 

Um in einige weitere Details: Ich benutze die Notnoop Push Notifications-Bibliothek und folgte dem Tutorial von Ray Wenderlich, um die Zertifikate zu generieren. nach, pflegte ich zu folgenden Kommandos eine p12-Datei zur Verwendung in Java zu generieren:

openssl x509 -in aps_development.cer -inform DER -out aps_development.pem -outform PEM 
openssl pkcs12 -nocerts -in single.p12 -out single.pem 
openssl pkcs12 -export -inkey single.pem -in aps_development.pem -out dual.p12 

nach, dass ich die dual.p12 in mein Java-Projekt verschoben. Zuerst war die Datei in meinem/src/main/java-Ordner, sagen wir mal unter com.company.push.certificates (während der Code, der die Datei anfordert, ist com.company.push). Ich fordere eine Eingabestrom von

InputStream stream = this.getClass().getResourceAsStream("certificates/dual.p12"); 

Das funktioniert gut in der Entwicklung verwendet wird, aber nicht, wenn das Projekt den Bau (mit Maven), das ist, warum ich die Ressource in den Ressourcen-Ordner verschoben, die exakt gleiche Paket. Die Ressource wird immer noch gefunden, aber jetzt bekomme ich die oben genannten java.io.IOException

Wer weiß, was könnte dies verursachen?

Ps: wenn ich die Datei zurück in das Paket in src/main/java verschiebe, funktioniert alles wieder gut, so scheint das Zertifikat gültig zu sein.

Antwort

18

Überprüfen Sie den Inhalt der Zertifikatsdatei NACH einem Build, wenn Maven nach target/classes/... kopiert wurde. Wahrscheinlich maven Ressourcenfilterung oder etwas anderes in Ihrem Build ändert die Datei. Überprüfen Sie, was im Klassenordner GENAU ist, genau wie im Ressourcenordner.

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

+0

Ich fühle mich wie ein Idiot Ich habe dies selbst nicht überprüft ... Dies scheint das Problem zu sein. Zumindest irgendwie. Während der Entwicklung verwende ich eine lokale jboss-Instanz, überprüfte die Datei im Bereitstellungsverzeichnis, es scheint tatsächlich etwas mit der Datei zu tun zu haben.Es scheint sogar eine andere Kodierung (UTF-8) zu haben, also nehme ich an, dass es als eine Textdatei anstelle einer Binärdatei behandelt wurde. Wie kann ich das verhindern? –

+0

Ok, aus irgendeinem Grund denkt jboss, dass es lustig ist, mit .p12 Dateien zu spielen, ungeachtet des Inhalts. Das Umbenennen der Datei in * .p12.cert scheint genug zu sein, um es zu "reparieren", macht mich aber nicht sehr glücklich :( –

11

Dies geschieht, weil Ressource Filterung Ihrer p12 ist die Maven-Datei korrumpiert.

Wir lösten diese durch p12-Dateien von Maven Ressource ohne mit diesem in pom.xml Filterung:

<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> 
7

persönlich zwei Ich weiß nicht wie das schließt/includes Abschnitt in der Maven-Build-Duplizierung und mit Ressourcenbereiche, die synchronisiert werden müssen - also verwende ich lieber das maven resources Plugin, um stattdessen nonFilteredFileExtensions zu konfigurieren.

Der Abschnitt Ressource in dem Build-Abschnitt wird dann einfach (plus irgendein spezifisch Sie benötigen enthalten):

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
    </resource> 
</resources> 

die Maven-Ressourcen-Plugin Sagen, die nicht bei der Aufnahme zu filtern Dateien:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.7</version> 
     <configuration> 
      <delimiters> 
       <delimiter>@</delimiter> 
      </delimiters> 
      <nonFilteredFileExtensions> 
       <nonFilteredFileExtension>p12</nonFilteredFileExtension> 
       <nonFilteredFileExtension>pfx</nonFilteredFileExtension> 
       <nonFilteredFileExtension>pem</nonFilteredFileExtension> 
      </nonFilteredFileExtensions> 
     </configuration> 
    </plugin> 

Siehe: http://maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html