我試圖使用密鑰庫訪問我的證書的私鑰。在Java中訪問硬件令牌的私鑰
這裏是我的代碼:
package test.java.com;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
KeyStore ks;
try {
ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);
Enumeration<String> en = ks.aliases();
while (en.hasMoreElements()) {
String aliasKey = (String) en.nextElement();
Certificate c = ks.getCertificate(aliasKey);
Key key = ks.getKey(aliasKey, "1753".toCharArray()); // Here I try to access the private key of my hardware certificate
byte[] bt = key.getEncoded();
if(bt != null) {
System.out.println("private key correctly accessed");
} else {
System.out.println("Can't access private key");
}
System.out.println("---> alias : " + aliasKey);
if (ks.isKeyEntry(aliasKey)) {
Certificate[] chain = ks.getCertificateChain(aliasKey);
System.out.println("---> chain length: " + chain.length);
X509Certificate Cert = null;
for (Certificate cert : chain) {
System.out.println(cert);
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但是,當我試圖讓私鑰(爲了與它簽約數據),私鑰爲空。
我做錯了嗎?如何使用其私鑰對該證書籤名數據?
注意:我必須使用密鑰庫(我不能使用硬件令牌驅動程序的DLL,因爲我可能有許多不同的驅動程序來到服務器)。
我在Java代碼中有空的密碼。 當我第一次向USB插入令牌並運行Java應用程序時,會顯示來自令牌中間件的彈出窗口,並且私鑰是可訪問的。 但是,當我第二次運行應用程序和更多次,應用程序凍結。 我必須再次移除並插入標記。 – 2016-11-04 08:22:43