Domanda

Sto tentando di abilitare la comunicazione SSL da un client di servizi Web (Axis2) utilizzando il certificato sulla carta CAC dell'utente. Funziona come un fascino .... fino a quando il server Web sia abilitato CAC. A quel punto la connessione SSL viene respinto con il messaggio di errore che gli altri certificati nella catena non sono stati inclusi.

Ho assicurato che il provider è disponibile, sia con l'aggiunta al file security.properties o la creazione di programatically.

Il mio approccio attuale è quella di impostare semplicemente le proprietà di sistema:     System.setProperty ( "javax.net.ssl.keyStore", "none");     System.setProperty ( "javax.net.ssl.keyStoreType", "PKCS11");

Ho capito da questo domanda / risposta che questo approccio invia solo il certificato di "fine entità". A quanto pare ho bisogno di attuare il mio X509KeyManager. Questo è un nuovo terreno per me, chiunque può suggerire un buon riferimento o fornire campioni di come farlo?

Apprezzare l'assistenza.

È stato utile?

Soluzione

La migliore implementazione Key Manager dipende dalla emittente dei certificati che ci si aspetta di utilizzare.

Se il certificato sul CAC dell'utente verrà sempre essere emesso da un'autorità di certificazione specifica, semplicemente archivio dei certificati dell'emittente e gli eventuali certificati intermedi a monte della catena in un file PKCS # 7. Nel metodo getCertificateChain(), questa collezione può essere aggiunto alla cieca al certificato dell'utente e restituito.

Se le cose non sono così semplici, ma un elenco completo dei possibili emittenti possono essere enumerati, ottenere tutti i loro certificati, e loro certificati dell'emittente, e così via, fino ai certificati di origine .

Aggiungi tutti i certificati radice in un negozio chiave come voci attendibili. Bundle i certificati intermedi in un PKCS- # file di 7-formato.

X509KeyManager ( o estendere X509ExtendedKeyManager se' ri lavorando con SSLEngine). In particolare, nel metodo getCertificateChain(), viene utilizzato un CertPathBuilder per creare una catena valida dal certificato dell'utente da una fonte attendibile. Il bersaglio è il certificato che si carica dal CAC dell'utente con il parametro alias. Il radici di fiducia sono i certificati in negozio di fiducia che si è creato; i certificati intermedi possono essere caricato dal # 7 file PKCS e aggiunto ai parametri costruttore. una volta che la catena è costruito, ottenere il percorso certificato e convertirlo per un array. Questo è il risultato del metodo getCertificateChain().

Se non è possibile prevedere chi sarà il rilascio del certificato dell'utente, potrebbe essere in grado di ottenere i certificati intermedi in fase di esecuzione da una directory LDAP o altri repository. Questo è un nuovo livello di difficoltà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top