2012-10-17 19 views
12

Java içinde MSCAPI keystore yüklemek ve mevcut sertifikaları MY deposunda incelemek istiyorum. Ancak bu sertifikalar için bazı anahtarlar donanım belirteçleri üzerinde bulunur ve bir açılır pencere yükleme sırasında belirteci sorar.Özel anahtarları yüklemeden MSCAPI Java Keystore'u yükle (sert belirteci)

Windows anahtar deposu yüklenirken özel anahtarları yüklemeyi ertelemenin bir yolu var mı? Sonunda da belirteç üretici tarafından sağlanan bir sürücü (aracılığıyla jetonuyla iletişim kurar - USB belirteci üretici tarafından sağlanan DLL -

keyStore = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); 
keystore.load(null,null); 
+0

Bu soru emsworth'a çok fazla ilgi göstermiyor, belki de Oracle forumlarından da (bu soruya link) sorun. –

cevap

7

açılan MS-CAPI şifreleme hizmeti sağlayıcısı (CSP) aktive ediliyor). KeyStore sadece bir çağrı yapar ve aradaki katmanlar sadece geçer; Size şöyle

// 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; 
    } 
    .... 

: belirteci üzerinde yazılım doğrulama pop-up yukarı atar ve oturum-devlet tutar bir, vb uygulama vardır anahtar Java dll sunmscapi.dll olduğunu

olduğunu her zaman özel bir anahtar için kontrol edebilir. Bu kodu değiştirmek ve bunu önlemek ya da bu denetimi başka bir şekilde yenilemek için özel bir sunmscapi.dll sürümü oluşturmanız gerekir.

+0

Bu durumdan korkuyordum. Nihayetinde bir donanım belirteci ile arabirim kurmaya ihtiyacım vardı, bu yüzden doğrudan bir terminale yerleştirilmiş jetonla doğrudan iletişim kurmak için smartcardio kullanıyorum. Java windows truststore, benim için kabul edilemez olan bilgisayara önceden yerleştirilmiş olan jetonlar için özel anahtarları yüklemeyi denedi. – emsworth

+0

SmartCard ile Meraklı ... Bu arada tokens istemeden Keystore'u yükleyebiliyorum: keyStore = KeyStore.getInstance ("Windows-MY"); keystore.load (null, NULL); Sanırım yazılım satıcısına bağlı. – jBilbo