0
我正在開發java applet,它應該能夠從Windows-MY實例讀取證書。這是我能夠做的部分,並且工作正常。我的問題是當我輸入PIN碼(通過編輯文本控件提供)時,Windows證書管理器在那之後再次詢問我是否有相同的PIN碼。如何使用Java中的引腳/密碼加載Windows-MY密鑰存儲?
所以,我有幾個問題,如果你能幫助我,我將非常感激。
- 我在做什麼錯在我的代碼,爲什麼它不使用我通過
EditText
控制提供的PIN?如何做到這一點? - 如果這不可行,請告訴我,PKCS#12數字證書的行爲方式與PKCS#11智能卡證書相同嗎?確切地說,他們是否像PKCS#11一樣請求PIN碼?如果是這樣,我應該能夠刪除我的PIN字段,並讓Windows來完成這部分工作。
這裏是我的小程序所使用的部分代碼:
keystore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
keystore.load(null,_PIN);
String aliass = (String) aliasses.nextElement();
X509Certificate oPublicCertificate = (X509Certificate) keystore.getCertificate(alias);
PrivateKey oPrivateKey = (PrivateKey) keystore.getKey(alias,null);
if(oPrivateKey == null) continue;
if(aliass != alias) continue;
System.out.println("Sign with alias:"+aliass);
System.out.println("gettype:"+oPublicCertificate.getType());
System.out.println("serial:"+oPublicCertificate.getSerialNumber());
System.out.println("Public Key:"+oPublicCertificate.getPublicKey());
_PK = Base64Utils.base64Encode(oPublicCertificate.getPublicKey().getEncoded());
System.out.println("Public Key:"+_PK);
Provider p = keystore.getProvider();
// data to sign
byte[] data ="Data for signing".getBytes();
// Signing the data
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initSign(oPrivateKey);
sig.update(data);
byte[] signature = sig.sign(); //<--- Here asks for PIN second time.
System.out.println("Signature.sign():" + signature);
Signature verifier = Signature.getInstance("SHA1withRSA", p);
verifier.initVerify(oPublicCertificate);
verifier.update(data);
boolean isValidSignature = verifier.verify(signature);
System.out.println("the verification result "+ isValidSignature);
我上午開放不同的方法來解決這個問題。