J'essaye de signer une chaîne avec des certificats différents de MS-KeyStore. Mais, je sais qu'il y a des clés importées d'un jeton dans MS-Keystore. Donc, mon problème est - si je passe par le Keystore et essaie de signer avec un cert qui a une référence à pkcs11, je reçois un pop-up pour entrer le mot de passe pkcs11. Comment puis-je vérifier si le certificat provient de mon token?Java - PKCS11 et MSKeyStore
Merci d'avance !!!
C'est mon code pour l'instant:
String alias;
byte[] data = "test".getBytes();
char[] pin = "pass".toCharArray();
try {
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, pin);
System.out.println("Provider: "+ks.getProvider());
System.out.println("KS size: " + ks.size());
Enumeration enumeration = ks.aliases();
while (enumeration.hasMoreElements()) {
alias = (String) enumeration.nextElement();
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, null);
Certificate certificate = ks.getCertificate(alias);
Provider provider = ks.getProvider();
Signature signature = Signature.getInstance("SHA1withRSA", provider);
try {
signature.initSign(privateKey);
signature.update(data);
byte[] signedSignature = signature.sign();
System.out.println("\tGenerated signature for " + alias);
signature.initVerify(certificate);
signature.update(data);
if (signature.verify(signedSignature)) {
System.out.println("\tSignature verifified for " + alias);
} else {
System.out.println("\tCould not verify signature for " + alias);
}
} catch (Exception ex) {
System.out.println("\tError for " + alias);
}
}
} catch (KeyStoreException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (CertificateException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (NoSuchAlgorithmException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (FileNotFoundException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (UnrecoverableKeyException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
Eh bien, je ne comprends pas très bien. Quel est votre problème si "une fenêtre contextuelle apparaît et vous demande d'entrer un mot de passe"? Si le cert provient du jeton externe, voici comment il sera utilisé: lors de la récupération du contenu d'un HSM, un mot de passe est nécessaire. Puis-je dire que vous voulez différencier le certificat du jeton externe des certificats "soft"/importés-dans-IE? – FaithReaper