2009-11-18 5 views
8

Il fornitore di sicurezza PKCS11 JCE di Sun è privo di alcune funzionalità di cui abbiamo bisogno.
Così ho scritto una versione migliorata usando le fonti originali.Come firmare un fornitore di sicurezza JCE personalizzato

Purtroppo le infrastrutture JCE respinge il nuovo provider
"JCE non può autenticare il provider"
perché non è correttamente firmato.

javax.crypto.JceSecurity.verifyProviderJar(...) tiri.
(che chiama javax.crypto.JarVerifier.verify())

Qualche suggerimento su come firmare il nuovo provider per renderlo lavoro con JCE?

+3

FYI: abbiamo richiesto un certificato da Sun e l'abbiamo ricevuto in 3 giorni lavorativi, senza problemi. Il certificato può essere utilizzato per firmare tutte le versioni di cui abbiamo bisogno. Poiché questa procedura può dipendere dalla tua posizione, potrebbe valere la pena menzionare che operiamo dalla Svizzera, in Europa. – 3dGrabber

risposta

7

Il processo è descritto nel documento, "How to Implement a Provider."

si tratta di email Sun Oracle alcune informazioni (tra cui la CSR si è generato per la vostra chiave di firma), quindi l'invio di fax un documento di conferma. Il recupero del certificato firmato può richiedere una settimana o più, quindi pianificare in anticipo.

È necessario solo firmare il provider se fornisce servizi limitati da alcuni governi (repressivi). Ad esempio, un'implementazione di Cipher è un "servizio" limitato, mentre MessageDigest è un servizio senza limitazioni. Presumo con il messaggio che stai ricevendo, che stai cercando di fornire un servizio limitato.

Se si fornisce uno di questi servizi, non c'è modo di aggirarlo: È necessario un certificato di firma del codice rilasciato da Sun. (Uno di IBM potrebbe funzionare anche, se ricordo male, la loro CA di firma del codice è supportata, ma non so nulla del loro processo di emissione.)

2

Devi firmare il JAR con "JCE Code Signing CA ". In tutte le attuali distribuzioni Java, solo 2 CA (Sun e IBM) sono integrate (codificate) e non è possibile aggiungerne di proprie. Abbiamo provato a lavorare con Sun per firmare il nostro provider ed è quasi impossibile. Non emetterebbero certificati CA intermedi, il che significa che devi passare attraverso il problema ogni volta che apporti una modifica.

Perché non usi solo la tua libreria? Si utilizza l'API standard per l'interoperabilità tra diversi JCE. Ma non è realistico per gli articoli CryptoKi/SmartCard in questo momento, è quasi sempre necessario scrivere un codice personalizzato per interagire con API specifiche del fornitore. Puoi perfino far simulare il tuo codice API JCE per minimizzare le modifiche al codice.

+0

Ho ottenuto due certificati da Sun, senza alcun problema. Sono stati molto disponibili e reattivi. – erickson

+1

Vuoi dire che ottieni "JCE Code Signing Certificate" da Sun? Utilizzano una radice CA speciale per JCE "JCE Code Signing CA". Quindi il certificato di firma del codice non funziona. –

+0

Sì, intendo il certificato che è necessario firmare un fornitore JCE. – erickson

3

Un'alternativa è progettare il provider personalizzato utilizzando OpenJDK. Questo è il progetto open source sponsorizzato da Sun/Oracle e fornisce la base di codice per la loro versione ufficiale. OpenJDK non richiede che i provider siano firmati. OpenJDK è disponibile (di default, ora) su diverse distribuzioni Linux. Sfortunatamente, non sembra essere prontamente disponibile su Windows o Macintosh. Se stai usando Windows o Macintosh, ti consiglio di installare Linux in una VM.

Se è necessario sviluppare su Windows o Mac, tuttavia, è possibile copiare il file jce.jar da un'installazione di OpenJDK su jce.jar (nella directory di Java lib) di un'installazione ufficiale. Ciò aggirerà efficacemente il processo di autenticazione Jar. Assicurati di mettere il file jce.jar originale quando hai finito di sviluppare, però.

0

Solo per info extra, ho avuto la stessa eccezione quando costruisco un JAR (Eclipse Juno) con l'opzione "Estrai richiesto librerie in JAR generato" invece le corrette "pacchetto librerie richieste in JAR generato"