Domanda

Lavoro con Web Start da un paio d'anni e ho esperienza con la firma dei vasetti e cosa no. Sto facendo il mio primo tentativo di distribuire un'app RCP con l'avvio Web e sebbene abbia effettivamente firmato tutti i barattoli con lo stesso certificato, continuo a ricevere questo errore: "Le risorse jar in jnlp non sono firmate dallo stesso certificato"

Qualcun altro l'ha scoperto? In tal caso, qualche idea su come risolvere?

È stato utile?

Soluzione

Quando ho avuto problemi simili dopo aver controllato i vasetti, ho scoperto che un vaso di terze parti era stato firmato da qualcun altro.

Dovresti creare un file jnlp separato per i vasetti firmati dall'altro certificato e leggere questo jnlp dal tuo file jnlp:

<resources>
  ...
  <extension name="other" href="other.jnlp"/>
</resources>

Qui o qui puoi trovare un esempio.

Altri suggerimenti

Potrebbe trattarsi di una voce manifest non aggiornata di un vaso già firmato che si utilizza come libreria. Ho riscontrato questo problema con jogl tramite webstart. Prova questo:

Decomprimi tutti i vasetti, elimina tutte le directory META-INF, jar e firmale di nuovo.

Ho scoperto che a JNLP / Webstart non piacciono le firme / firme multiple tramite jarsigner.exe per un determinato JAR. Se un JAR come BouncyCastle (che viene assegnato) viene nuovamente firmato con il certificato dell'azienda, l'ispezione visiva mi porta a credere che il nuovo certificato e le firme vengano eseguiti correttamente nel JAR. ma che JNLP potrebbe leggere solo la prima firma (in ordine alfabetico?) nel META-INF, e quindi lamentarsi che non corrisponde agli altri JAR (che hanno solo una firma, Corporate, su ciascun JAR).

Ho avuto esattamente la stessa esperienza descritta da Matthew con i JARs BouncyCastle. Tuttavia, ho scoperto che JRE versione 1.6.0_14 e successive accetterà volentieri JAR con più firme (come mi sarei aspettato). Quindi, non avevo bisogno di usare il "meccanismo di estensione dei componenti" di JNLP sopra descritto.

PS Non è stato trovato alcun riferimento evidente a questa correzione nelle note di rilascio 1.6.0_14. Tuttavia, ho verificato che più JAR firmati funzionano in tutte le versioni successive (almeno 14-17 + 24).

Consulta la spiegazione di una delle FAQ: Come posso utilizzare più file JAR firmati da certificati diversi?

Soluzione giusta.

Nel mio progetto, quello che è successo è che ci sono un paio di istanze nel pool di bilanciamento del carico, ci sono alcune istanze con la vecchia versione del codice e alcune con la nuova versione. Quindi ci sono certificati non firmati dallo stesso certificato ...

Il seguente script elenca il numero di serie del certificato RSA in ciascun vaso nella directory / some / lib e aiuta a trovare vasi che sono firmati dal certificato sbagliato:

for f in $( find /some/lib -type f -name '*.jar' )
do 
   serial=$( unzip -p $f 'META-INF/*.RSA' | 
             openssl pkcs7 -inform der -print -noout |
             grep --max-count=1 serialNumber | cut -d: -f2- | tr -d ' ' )
   printf "%40s: %s\n" "$serial" "$f"
done
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top