La firma di un file jar con certificato attendibile per JWS distribuzione

Ho sviluppato un programma open source, WPCleaner, distribuito tramite Java Web Start. La versione corrente è disponibile a http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp

Con i ultimi aggiornamenti in Java, diventa sempre più difficile per distribuire le applicazioni Java tramite Java Web Start quando è necessario l’applicazione per avere un paio di autorizzazioni (scrivere in preferenze di accesso ad altri siti web, …)

La mia domanda era auto-firmato, che era ok, ma prima di nuovi aggiornamenti richiedono agli utenti di accettare l’applicazione ogni volta che l’esecuzione è, non solo una volta e per tutte, se lo desiderano. Così, ho deciso di utilizzare un certificato per la firma della mia applicazione.

Ho avuto uno da Certum (a quanto pare, sei libero per sviluppatori open source), a seguito di questa discussione: Certificato di firma del codice per i progetti open-source?

Ho generato un nuovo file jar, firmato con il certificato (file jar disponibile a http://site4145.mutu.sivit.org/WikiCleaner/WikipediaCleanerTest.jar), ma ho ancora problemi: quando cerco di avviare l’applicazione tramite JWS, Java viene ancora visualizzato un messaggio di avviso di windows non avermi fiducia l’applicazione una volta per tutte. L’Editor è ancora visualizzato come SCONOSCIUTO, ma quando guardo nei dettagli del messaggio, è il mio nuovo certificato dal Centrum utilizzato.

Qualcuno ha un’idea di cosa sto facendo di sbagliato ?
Ho pensato che avere un certificato da un’autorità di certificazione attendibile (Centrum sembra essere in Java cacerts) dovrebbe consentire agli utenti di accettare il certificato una volta per tutte.

Grazie

PS: Quando ho eseguito jarsigner -verify, ottengo il seguente messaggio di avviso
“Questo vasetto contiene le voci la cui catena di certificati non è convalidato.”

InformationsquelleAutor NicoV | 2013-10-18



6 Replies
  1. 10

    [Aggiornamento 2017] codice Sorgente Aperto per la firma da Certum ora utilizza una crittografia flash card come una Chiave Privata e deve essere collegato per il certificato di attivazione & installazione, così come per il codice della firma. La chiave i costi di 125$ (+ spese di spedizione) e il 1 anno del certificato da solo costa 40$. Si può chiedere uno sconto.


    Ecco i passaggi seguenti per firmare il file jar da zero.

    Istruzioni

    Le istruzioni in inglese sono difficili da trovare e non aggiornato. La procedura seguente è basata su questi 2 documenti:

    Creare, attivare e installare il certificato:

    1. Andare su “Certum Certificazione” sito in “Codice OpenSource Firma” sezione e ordinare il vostro certificato.
    2. Una volta la crittografia scheda di memoria flash è ricevuto (ci sono voluti 15 giorni per me), inserire la spina, installare il driver e il proCertum CardManager software dalla scheda.
    3. Vai al tuo Certum account e seguire il processo di attivazione del nuovo ordinato certificato.

    Suggerimento: Il CryptoAgent applicazione Java Web Start viene eseguito solo con un JDK (non JRE) < 9 (così, JDK 7 o 8).

    1. Riceverai una mail con richiesta di alcuni documenti ufficiali (carta di identità, affitto bill, etc.) e una e-mail alla procedura di verifica.
    2. Inviare la richiesta di attivazione di documenti e informazioni. Riceverete un’altra mail di richiesta per l’installazione del certificato (la verifica è stata fatta in 1 ora).
    3. Installare il certificato di crittografia scheda che segue la procedura di Memorizzare il Certificato sulla carta (vedere le istruzioni in inglese, parte 4)

    Ottenere il file di “bundle.pem”

    Questo file è obbligatorio per l’ottenimento di un certificato valido catena quando la firma dell’applicazione (vedere la parte 7.1.2 nelle istruzioni in polacco).

    Essenzialmente consiste di concatenazione in un formato di testo normale file 1) il certificato e 2) il Certum di Firma del Codice CA SHA2 chiave pubblica.

    1. Aprire proCertum CardManager >> Leggere la Scheda >> scheda Comune >> Selezionare il certificato e fare clic su “Mostra dettagli”,
    2. Esportare il certificato x509 – base-64
    3. Scaricare il Certum di Firma del Codice CA SHA2 in formato PEM (dal elenco dei certificati radice di Certum).
    4. Creare il file di testo “bundle.pem” per la concatenazione di questi 2 certificati (primo certificato e secondo il Certum certificato).

    Segno il tuo file jar con Jarsigner

    1. Creare il “fornitore di servizi.cfg” file come spiegato nel punto 7.2 le istruzioni in inglese.
    2. È necessario il alias del certificato (e non il nome del proprietario) per firmare il vaso. Per ottenere eseguire il seguente comando:
    keytool -list -v -keystore NONE -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]"
    1. Una volta ottenuto il alias, il provider.cfg e bundle.pem file già pronti, solo il tuo segno vaso con il seguente comando:
    jarsigner -keystore NONE -certchain "bundle.pem" -tsa "http://time.certum.pl" -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg "provider.cfg" -storepass "[your_pin]" "[your_code].jar" "[your_alias]"

    Personalmente, io uso uno script Ant per firmare la mia applicazione file jar. Vedere signjar attività da ANT progetto.

    • Questo è stato, grazie! Ottenere il corretto alias dal P12 era il pezzo mancante per me. Con questa procedura ho ottenuto il mio libero e open-source certificato da Certum di lavoro.
    • Si prega di assicurarsi di utilizzare lo stesso Chrome per le operazioni da 1 a 5. Passo 2 installa qualcosa dentro di Chrome (credo si tratti di una coppia chiave pubblica/privata) che è richiesto al punto 4 (e versioni successive). Cercando di raggiungere il punto 4 (e successivi) non sul browser che è stato utilizzato per il passo 2 con un errore.
    • Su Linux, Chrome è in grado di includere la catena di certificazione durante l’esportazione di un tasto. Quindi, un passo 6 esporta un incompleto .pfx chiave. Per ottenere un completo di chiave, è necessario ottenere questi due file da Certum: certum.ue/upload_module/downloads/certum/certyfikaty/nowe/… e certum.pl/CA.crt , aprire il tuo incompleto .pfx chiave in KeyTool GUI, fare clic con il tasto, scegliere “Modifica della Catena di Certificati > Append Certificato” e aggiungere l3.crt, fare clic destro di nuovo il tasto, scegliere “Modifica della Catena di Certificati > Append Certificato” e aggiungere CA.crt. Salvare e uscire. E ora la tua chiave è pronto per la fase 7 e 8.
    • JWS: Quando il client di accesso JNLP file. Per scaricare ed eseguire le applicazioni Java(Firma & Certificata) dal web. Configure untrusted Java-App URL Exception Site List come https://hostname.example.com:8088 per l’esecuzione dal WEB. Example
  2. 6

    Penso che finalmente è riuscito a farlo seguendo questa procedura:

    • Installato il certificato fornito dal Certum in Chrome attraverso il loro sito web interfaccia
    • Esportato la chiave privata come un .pfx da Chrome (Impostazioni, Gestire i certificati di Esportazione, l’Esportazione della chiave privata, PKCS#12, …)
    • Utilizzato KeyTool GUI (java fronteggiato GUI per keytools) per creare un completo p12: importati Certum radice certificato come certificato attendibile, importati i certificati intermedi come certificati attendibili, importato il mio .pfx come una coppia di chiavi
    • Firmato il vaso con questa p12

    Sembra funzionare per me, sto aspettando il feedback degli utenti, per essere sicuri che funziona anche per loro.

    Edit: ho provato di nuovo a esportare il certificato da google Chrome, e ho visto che c’è un’opzione per includere il certificato di catena di esportazione. Quando si fa questo, non ho nemmeno bisogno di usare il KeyTool GUI dopo. Ho reinstallato la versione di prova firmato con questo nuovo p12 :

    • Installato il certificato fornito dal Certum in Chrome attraverso il loro sito web interfaccia
    • Esportato la chiave privata come un .pfx da Chrome (Impostazioni, Gestire i certificati di Esportazione, l’Esportazione della chiave privata, PKCS#12 + catena di certificati, …)
    • Firmato il vaso con questa p12
    • “Esportato la chiave privata come un .pfx” Utilizzando l’SDK keytool? Si potrebbe andare più nel dettaglio il comando(s) rilasciato?
    • Ho cambiato la descrizione per fornire ulteriori dettagli. E ho visto che posso creare un completo p12 direttamente da google Chrome senza il bisogno di KeyTool GUI. Ho reinstallato questo ha appena firmato un contratto jar come versione di prova.
    • “Esportato la chiave privata come un .pfx da Chrome (Impostazioni, Gestire i certificati..” Eh? Non vedo nessuna opzione simile, in Versione Cromata 30.0.1599.101 m..
    • Anche Chrome 30.0.1599.101 m, sotto Win 7: nella scheda Impostazioni, clicco prima su “Mostra impostazioni avanzate” per visualizzare ulteriori impostazioni. Poi, nel “HTTP/SSL” parte (tra “Downloads” e “Google Cloud Print”), ho una “Gestione certificati…” pulsante. Non si dispone di questo ?
  3. 3

    Sto aspettando il feedback degli utenti, per essere sicuri che funziona anche per loro.

    Base JaNeLA per il file – valido JNLP. Soprattutto noto editore per WikiCleanerTest..

    La firma di un file jar con certificato attendibile per JWS distribuzione

    Quindi c’è un solo risultato ‘sembra funzionare qui per identificare l’autore”. Ottimo lavoro e grazie per la descrizione del processo.

    Funziona molto meglio di quello che ho visto prima. 😛


    Jarsigner -verificare

    s     292828 Sun Oct 20 17:57:58 EST 2013 META-INF/MANIFEST.MF
          292645 Sun Oct 20 17:57:58 EST 2013 META-INF/WPCLEANE.SF
            2017 Sun Oct 20 17:57:58 EST 2013 META-INF/WPCLEANE.RSA
               0 Sun Oct 20 17:57:52 EST 2013 META-INF/
               0 Wed Feb 11 15:04:50 EST 2009 META-INF/maven/
               ..
               0 Sun Oct 20 17:57:32 EST 2013 org/xnap/commons/i18n/
    sm      2837 Thu Sep 09 16:00:54 EST 2004 META-INF/info.xml
    ..
    sm       214 Wed Feb 11 00:57:02 EST 2009 org/xnap/commons/i18n/LocaleChangeListener.class
    
      s = signature was verified 
      m = entry is listed in manifest
      k = at least one certificate was found in keystore
      i = at least one certificate was found in identity scope
    
    jar verified.
    
    Warning: 
    This jar contains entries whose certificate chain is not validated.
    
    Re-run with the -verbose and -certs options for more details.

    Ho capito il messaggio di avviso:

    Questo vasetto contiene le voci la cui catena di certificati non è convalidato.

    ..può essere ignorato.

    JaNeLA Report

    JaNeLA mostra un errore.

    JaNeLA Report - version 11.05.17
    
    Report for http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp
    
    cvc-complex-type.2.4.a: Invalid content was found starting with element 'homepage'. One of '{description, icon, offline-allowed, shortcut, association, related-content}' is expected.
    cvc-complex-type.2.4.a: Invalid content was found starting with element 'homepage'. One of '{description, icon, offline-allowed, shortcut, association, related-content}' is expected.
    
    XML encoding not known, but declared as utf-8
    Codebase + href 'http://site4145.mutu.sivit.org/WikiCleaner.jnlp' is not equal to actual location of 'http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp'.
    Desktop icons were subject to bug nnnn in earlier J2SE versions
    Optimize this application for off-line use by adding the <offline-allowed /> flag.
    'short' description is longer than 'default' description.
    Downloads can be optimized by specifying a resource size for 'WikipediaCleaner.jar'.
    The resource download at WikipediaCleaner.jar can be optimized by removing the (default) value of download='eager'.
    Lazy downloads might not work as expected for WikipediaCleaner.jar unless the download 'part' is specified. 
    Resource type png of resource commons-nuvola-web-broom.png is not one of the allowable types of gif, jpg, jpeg.
    Downloads can be optimized by specifying a resource size for 'commons-nuvola-web-broom.png'.
    Icon loading & use can be optimized by specifying the width and height for commons-nuvola-web-broom.png

    Vedere il JNLP convalidato, e una versione riveduta e corretta con tweak, di seguito.

    Lancio

    Ma qui è la vera cattiva notizia:

    La firma di un file jar con certificato attendibile per JWS distribuzione
    La firma di un file jar con certificato attendibile per JWS distribuzione

    Qui ci sono alcuni dettagli del certificato:

    • Nicolas Vervelle (Nicolas Vervelle)

      • Oggetto: CN=Nicolas Vervelle,
        OU=WikipediaCleaner,
        O=WikipediaCleaner,
        L=Parigi,
        ST=Francia,
        C=FR

    Aggiornato Java

    Qui è un avviso strano non capisco..

    La firma di un file jar con certificato attendibile per JWS distribuzione

    L’app. è richiesta la 1.5.0+, quindi qualsiasi versione 1.7+ dovrebbe essere accettato senza discussione.

    Sostiene di essere la richiesta di 1.6 (probabilmente perché non ho la 1.5 runtime installato). L’unica cosa che posso pensare è innescare l’allarme è l’inserimento di una micro-versione, che è inutile.

    JNLP

    Qui è il JNLP convalidato sopra:

    <?xml version="1.0" encoding="utf-8"?>
    <jnlp spec="1.5+" codebase="http://site4145.mutu.sivit.org/WikiCleaner" href="WikiCleaner.jnlp">
      <information>
        <title>WPCleaner</title>
        <vendor>User:NicoV</vendor>
        <description>WPCleaner</description>
        <description kind="short">A tool for Wikipedia maintenance</description>
        <homepage href="http://en.wikipedia.org/wiki/WP:WPCleaner"/>
        <icon href="commons-nuvola-web-broom.png"/>
        <shortcut>
          <desktop/>
        </shortcut>
      </information>
      <security>
        <all-permissions/>
      </security>
      <resources>
        <j2se version="1.5.0+" java-vm-args="-Xmx512M"/>
        <jar href="WikipediaCleaner.jar" download="eager" main="true"/>
      </resources>
      <application-desc main-class="org.wikipediacleaner.WikipediaCleaner"/>
    </jnlp>

    Qui si suggerisce la sostituzione. È valido in base a JaNeLA (bar avvisi che possiamo ignorare). Esso include anche un altro tweak per la versione minima di attributo.

    <?xml version="1.0" encoding="utf-8"?>
    <jnlp spec="1.5+" codebase="http://site4145.mutu.sivit.org/WikiCleaner" href="WikiCleaner.jnlp">
      <information>
        <title>WPCleaner</title>
        <vendor>User:NicoV</vendor>
        <!-- Should be here.. -->
        <homepage href="http://en.wikipedia.org/wiki/WP:WPCleaner"/>
        <description>WPCleaner</description>
        <description kind="short">A tool for Wikipedia maintenance</description>
        <icon href="commons-nuvola-web-broom.png"/>
        <shortcut>
          <desktop/>
        </shortcut>
      </information>
      <security>
        <all-permissions/>
      </security>
      <resources>
        <!-- the micro-version request might be triggering the 
        Out-Of-Date Java version warning -->
        <j2se version="1.5+" java-vm-args="-Xmx512M"/>
        <jar href="WikipediaCleaner.jar" download="eager" main="true"/>
      </resources>
      <application-desc main-class="org.wikipediacleaner.WikipediaCleaner"/>
    </jnlp>
    • Grazie mille per il link e l’analisi. Non sapevo JaNeLA, molto utile strumento per ripulire il file jnlp. site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp è ancora JNLP per l’installazione con il self-signed jar, quindi è normale avere il messaggio di avviso e di non essere in grado di fiducia l’applicazione una volta per tutte. site4145.mutu.sivit.org/WikiCleaner/WikiCleanerTest.jnlp è il test JNLP con l’applicazione firmato con il mio certificato fornito dal Certum. Se si vuole provare, dovrebbe funzionare correttamente ora.
  4. 2

    Su Linux, la procedura ha funzionato per me. Essa si basa sulla risposta da Eric David.

    Ottenere il vostro Certificato di

    Andare su “Certum Certificazione” sito del “Codice OpenSource Firma” sezione. Acquistare un certificato e seguire la procedura di creazione.

    Ottenere la Chiave Pubblica per la Firma del Codice

    Ottenere il Chiave pubblica del Certum di Firma del Codice CA, probabilmente il CA SHA2 chiave cscasha2.cer.

    Convertire il certificato in formato pkcs12

    • Importare il tuo certificato (quello ottenuto dal Certum) in Firefox:
      voce di menu impostazioni – avanzate – certificati – mostra certificati.
    • Importare il CA SHA2 public key (utilizzato da Certum per firmare il certificato):
      scheda cert. autorità di importazione.
    • Verificare. Si dovrebbe dire che è stato verificato:
      scheda propri certificati – show.
    • Esportare il certificato:
      scheda propri certificati – salvare – come pkcs12 (ad esempio per mycert.p12)

    La conversione dal formato pkcs12 per jks formato

    Trovare l’alias utilizzato nel file pkcs12. Esso sarà simile a “unizeto tecnologie s.un. id von sviluppatore open source, il TUO NOME“.

    keytool -list -v -storetype pkcs12 -keystore mycert.p12 > out.txt
    grep Aliasname out.txt

    Poi convertire il file pkcs12 in java jks formato. Questo passaggio può essere omesso, ma una volta fatto è conveniente.

    keytool -importkeystore -srckeystore mycert.p12 -srcstoretype pkcs12 -srcalias "ALIASNAME" -destkeystore mycert.jks -deststoretype jks -deststorepass PASSWORD -destalias SHORTALIAS

    Segno il tuo file jar

    Per evitare avvisi di memoria utente, il file jar file manifesto deve contenere i seguenti attributi:

    • Nome-applicazione: APPNAME
    • Autorizzazioni: tutti i permessi
    • Codebase: URL
    • Applicazione-Biblioteca-Ammissibile-Codebase: URL

    Segno il tuo jar file utilizzando il seguente comando:

    jarsigner -keystore mycert.jks -tsa http://time.certum.pl FILENAME.jar SHORTALIAS
    • Se Firefox non esportare il certificato “Impossibile creare il file PKCS #12 file di backup per motivi sconosciuti.” utilizzare pk12util invece.
  5. 0

    Ho risolto lo stesso problema sulla mia oggi con questo :

    Manifest-Version: 1.0
    Trusted-Library: true
    Application-Library-Allowable-Codebase: *
    Trusted-Only: false
    Application-Name: My app
    Permissions: all-permissions
    Created-By: 1.6.0_16 (Sun Microsystems Inc.)
    Caller-Allowable-Codebase: *
    Codebase: *
    • Grazie, ma non a tutti i cambiamenti: l’editor è ancora visualizzato come SCONOSCIUTO e non c’è modo di accettare l’applicazione, una volta per tutte.
  6. 0

    Come accennato qui, per rimuovere l’IGNOTO EDITORE avviso è possibile aggiungere il certificato utilizzato per firmare il vaso in Firmatario Jar di Java dal Pannello di Controllo: Configurare Java -> Protezione -> Gestione Certificati -> Signer Vaso opzione -> Importa.

Lascia un commento