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.
dare un'occhiata a http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java potrebbe darvi alcuni suggerimenti. –