2009-04-15 8 views
8

Ho bisogno di scrivere un programma java per connettersi a un server HTTPS (sito Web DoD). Il sito Web richiede l'autenticazione CAC (DoD Common Access Card). Se accedi a questo sito tramite browser, inserisci prima il tuo CAC, quindi inserisci un PIN.Come connettersi al server HTTPS utilizzando la scheda di accesso comune

Ho bisogno di eseguire il processo di autenticazione a livello di codice in java (tipo di comportarsi come browser). Come posso recuperare le informazioni dal CAC? Sono stato su Google e ho letto la Guida di riferimento di Java PKCS # 11. Sembra che Sun PKCS # 11 Provider possa farlo, ma è necessaria l'implementazione del token nativo PKCS # 11.

ho ragione? Qualcuno ha mai fatto questo prima d'ora? Qualsiasi suggerimento o commento sarà molto apprezzato.

+0

dare un'occhiata a http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java potrebbe darvi alcuni suggerimenti. –

risposta

3

In primo luogo, è necessario installare il supporto PKCS # 11. Questo è un codice nativo che probabilmente è arrivato con il tuo lettore di schede che fornisce un file .dll (o .so) che fornisce un'interfaccia PKCS # 11. Altri software sul sistema, come i prodotti Mozilla e il provider PKCS # 11 di Sun, utilizzano questa libreria. (I prodotti Microsoft utilizzano spesso un'interfaccia diversa, "CAPI".)

Quindi, seguendo le istruzioni nel PKCS #11 Reference Guide, impostare un provider SunPKCS11. Le uniche proprietà che ho dovuto fornire nella mia configurazione sono la posizione della "libreria" nativa che è stata installata e il suffisso "nome" per questo provider. La proprietà "nome" viene aggiunta a "SunPKCS11-", quindi se si specifica "CAC" per il nome, è possibile cercare in seguito lo Provider con Security.getProvider("SunPKCS11-CAC").

Quindi, è possibile utilizzare le proprietà di sistema standard di JSSE javax.net.ssl.keyStore (per un valore di "NONE") e javax.net.ssl.keyStoreType (con un valore di "PKCS11") per dare l'accesso al materiale JSSE chiave sul CAC. Non è necessario impostare la proprietà della password, poiché il codice nativo dovrebbe richiedere all'utente il proprio PIN quando necessario.

L'avvertenza è che solo il certificato di "entità finale" dell'utente è disponibile dal CAC. Per costruire una catena affidabile, la maggior parte dei server si aspetta che il client invii eventuali certificati intermedi. Lavorare su questo è possibile, ma complicato, poiché implica l'implementazione del proprio javax.net.ssl.X509KeyManager. Se il server con cui si sta lavorando richiede una catena completa, si prega di inviare una domanda di follow-up.

Problemi correlati