証明書トークンを使用して文書に署名するJavaコードを開発しています。これまではすべてがうまくいっていますが、私はユーザーのピンを保存しているので、毎回入力する必要がないように「ピンの入力」ダイアログを表示しないようにしたいと考えています。ここでの本当の問題は、このコードがバッチモードで実行されることです(ユーザーとの対話なし)。いったんタイプされると、キーは記憶に残っているので、短時間のうちに再度タイプする必要はありません。しかし、私はそれに頼ることはできません、私はPINを提供する必要があります。私はおよそCryptSetProvParam
PP_KEYEXCHANGE_PIN
魔女は、溶液であってもよく聞いたことがあるSunMSCAPIで文書に署名し、「PINを入力」ダイアログを表示しない
protected KeyStore loadKeyStoreFromSmartCard() {
keyStore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
keyStore.load(null, null);
return keyStore;
}
public void signDocument(byte[] conteudoParaAssinar, String certAlias) {
char[] pass = (char[]) null;
PrivateKey key = (PrivateKey) loadKeyStoreFromSmartCard.getKey(certAlias, pass);
Certificate[] chain = loadKeyStoreFromSmartCard(true).getCertificateChain(certAlias);
CertStore certsAndCRLs = CertStore.getInstance("Collection", new CollectionCertStoreParameters(Arrays.asList(chain)), "BC");
X509Certificate cert = (X509Certificate) chain[0];
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addSigner(key, cert, CMSSignedDataGenerator.DIGEST_SHA1);
gen.addCertificatesAndCRLs(certsAndCRLs);
CMSProcessable data = new CMSProcessableByteArray(conteudoParaAssinar);
CMSSignedData signed = gen.generate(data, true, "SunMSCAPI");
byte[] envHex = signed.getEncoded();
}
EDIT、しかし:ここでは、私がこれまで持っているコードは(それが唯一のサンプルである、それは完全でも仕事ではないかもしれません)私はjavaから呼び出す方法を知らない。私が見つけたすべての例は.netのためのものです。
theresのかもしれないコールバックを登録する方法はありませんか?私はPKCSを使用することはできません.. :( –
@Rafael私は答えを更新しました。 –