簡體   English   中英

Java 安全性 - MSCAPI 提供程序:如何僅從 USB 令牌中檢索證書

[英]Java security - MSCAPI provider: How to retrieve certificates from USB tokens only

我已經設法在我的小程序中使用 Sun 的 MSCAPI 提供程序。

我的小程序只是從 Windows 證書存儲中列出證書,並讓用戶通過允許用戶選擇他/她的首選證書來簽署他/她的交易。

我想阻止用戶在沒有 USB 令牌/智能卡的情況下簽名,這意味着如果我的小程序的私鑰未存儲在 USB 令牌/智能卡中,則它不應該顯示/列出證書。

我檢索這樣的證書(刪除了 try catch 塊):

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

enumeration = keyStore.aliases();
while(enumeration.hasMoreElements()) {
    String alias = (String) enumeration.nextElement();
    Certificate ksCertificate = keyStore.getCertificate(alias);

    ...
}

我像這樣管理簽名(刪除了 try catch 塊):

// Retrieve private key
privateKey = (PrivateKey) keyStore.getKey(alias, null);

// Sign data by using certificate's signing algorithm
Signature signer = Signature.getInstance(certificate.getSigAlgName(), keyStore.getProvider());

signer.initSign(privateKey);
signer.update(data);
result = signer.sign();

我找不到任何方法來區分證書是否來自 USB 令牌。 我檢查了 Certificate 和 PrivateKey 對象,但是我找不到任何對我有用的屬性。

關於如何使用 MSCAPI 執行此操作的任何建議? 或者任何建議作為 MSCAPI 替代?

(我不/不能使用PKCS11的原因是需要在全球范圍內支持多個品牌的令牌,並且要求小程序不應為每個令牌維護內部的PKCS11 dll路徑列表。檢索dll也不接受來自服務器端的路徑。所以在這種情況下,我不能使用 PKCS11。如果我錯了,請糾正我。)

我覺得現在回復太晚了。

每個 USB 令牌提供商都會為其令牌提供定制的驅動程序。 Ex.ePass 或 ProxKey 有它自己的驅動程序。 驅動程序 (DLL/SO) 文件的位置會有所不同。 驅動程序的文件名也會有所不同。 所以你不能在沒有提到正確的驅動程序路徑的情況下讀取/初始化它們。 你可以去https://github.com/joelhockey/jacknji11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM