2014-04-17 20 views
9

Quando provo ad usare APNS java per inviare la notifica push di iOS, ho ricevuto questo messaggio di errore:Errore certificato APNS Java con "DerInputStream.getLength(): lengthTag = 109, troppo grande."

com.notnoop.exceptions.InvalidSSLConfig: java.io.IOException: DerInputStream.getLength(): lengthTag = 109, troppo grande.

Ho già provato a convertire il certificato in Personal Information Exchange (.p12) ottenendo anche lo stesso errore. Qualcuno sa per problema e come risolverlo?

Ecco il mio codice Java:

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

Grazie.

+0

Per riprodurre: '> keytool -list -keystore keystore.jks -storetype pkcs12' fornisce l'errore' keytool: java.io.IOException: DerInputStream.getLength(): lengthTag = 109, too big.. Assicurati di specificare '-storetype' quando usi' keytool'. –

risposta

18

Ciò si verifica perché il sistema pensa di provare a leggere un diverso tipo di archivio chiavi e non JKS. Dovrai specificare che il file è JKS o convertirlo nell'altro formato.

Vedo che avete già provato a convertire in .p12. Se hai fatto questo correttamente, forse c'è un altro formato predefinito. Raccomando invece di specificare come specificare JKS.

+1

Grazie. Sto usando l'app java con il server jetty incorporato. Specifica di trustStoreType: il problema di JKS è andato via. – Goran

+0

Qualcuno sa perché 'JKS' funziona, e' PKCS12' no? –

+0

omg così facile, non mi sono reso conto che sto lavorando con jks e non con pkcs12 ... – Betlista

9

Ho avuto lo stesso problema ma la mia soluzione vi aiuterà solo se si utilizza maven.

Il filtro delle risorse Maven (che consente di includere variabili nei file delle risorse) può compromettere i file binari ei certificati sono particolarmente sensibili alle modifiche.

In generale, il contenuto binario non deve essere filtrato. Ma non potevo semplicemente disabilitare il filtro delle risorse perché ho alcuni file .properties che includono variabili. Quindi la soluzione era di escludere i file .p12 dal filtro.

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

più su Maven filtraggio delle risorse: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

+0

Grazie mille! Ho battuto la testa contro questo per ore. –

2

Se si utilizza Maven, questo è probabilmente accadendo a causa del filtraggio Maven nella cartella risorse intero. Ho provato la soluzione Zsolt Safrany sopra e non ha funzionato. Tuttavia, leggendo la documentazione ha condiviso, ho trovato questo:

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

che esclude le estensioni binari (o qualsiasi estensione che si desidera) da essere filtrato.