Das Popup aus dem MS-CAPI Cryptographic Service Provider (CSP) wird aktiviert, der durch einen Fahrer auf das Token in Verbindung steht schließlich (auch durch die Token-Hersteller geliefert). KeyStore ruft lediglich an und die Layer dazwischen passieren sie einfach; die Firmware auf dem Token ist derjenige, der die Authentifizierung Pop-up und unterhält Session-Zustand etc.
Der Schlüssel Java dll sunmscapi.dll ist, die die Umsetzung hat wirft:
// Use CertEnumCertificatesInStore to get the certificates
// from the open store. pCertContext must be reset to
// NULL to retrieve the first certificate in the store.
while (pCertContext = ::CertEnumCertificatesInStore(hCertStore, pCertContext))
{
// Check if private key available - client authentication certificate
// must have private key available.
HCRYPTPROV hCryptProv = NULL;
DWORD dwKeySpec = 0;
HCRYPTKEY hUserKey = NULL;
BOOL bCallerFreeProv = FALSE;
BOOL bHasNoPrivateKey = FALSE;
DWORD dwPublicKeyLength = 0;
if (::CryptAcquireCertificatePrivateKey(pCertContext, NULL, NULL,
&hCryptProv, &dwKeySpec, &bCallerFreeProv) == FALSE)
{
bHasNoPrivateKey = TRUE;
} else {
// Private key is available
BOOL bGetUserKey = ::CryptGetUserKey(hCryptProv, dwKeySpec, &hUserKey);
// Skip certificate if cannot find private key
if (bGetUserKey == FALSE)
{
if (bCallerFreeProv)
::CryptReleaseContext(hCryptProv, NULL);
continue;
}
....
Wie Sie kann sehen, dass es immer nach einem privaten Schlüssel sucht. Sie müssten diesen Code ändern und eine benutzerdefinierte Version von sunmscapi.dll erstellen, um dies zu vermeiden oder diese Überprüfung anderweitig zu verhindern.
Diese Frage bekommt nicht viel Aufmerksamkeit, vielleicht fragen Sie auch in den Oracle-Foren (Link zu dieser Frage). –