我正在试验相对较新的SunMSCAPI安全提供商。我想构建一个简单的applet,它会提示浏览器弹出证书选择框。我从那开始接手。我用谷歌一种方式搜索了一下,然后又用另一种方式搜索了一下。有什么建议吗?
发布于 2011-02-09 04:07:09
我正在努力做一些类似的东西--尽管是一个非web应用程序。到目前为止,唯一对我有效的解决方案是对C#执行JNI (使用MCPP封装)。
发布于 2016-09-26 17:41:36
可以使用SunMSCAPI提供程序实例化本地客户端windows密钥库。只需使用以下代码即可完成此操作:
KeyStore keyStore = KeyStore.getInstance("Windows-MY",new SunMSCAPI());
keyStore.load(null, null);或者,如果您愿意,可以将提供程序添加到安全列表中,而不是将其传递给getInstance()调用:
SunMSCAPI providerMSCAPI = new SunMSCAPI();
Security.addProvider(providerMSCAPI);
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);请注意,默认情况下,它可能已经添加到windows OS上的java安装的安全提供商列表中。
关于你的问题没有太多的细节,所以我给你一个例子来展示来自本地客户端windows keystore的相关证书的所有别名和主题,以说明这个提供者的用法:
package org.catcert.crypto.keyStoreImpl.windows;
import java.security.KeyStore;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import sun.security.mscapi.SunMSCAPI;
public class Example {
public static void main(String args[]) throws Exception {
KeyStore keyStore = KeyStore.getInstance("Windows-MY",new SunMSCAPI());
keyStore.load(null, null);
// copy to avoid concurrent problems with aliases...
ArrayList<String> aliases = Collections.list(keyStore.aliases());
for(String alias : aliases){
System.out.println("keyEntry alias: " + alias);
X509Certificate cert = (X509Certificate)keyStore.getCertificate(alias);
System.out.println("Certificate subject: " + cert.getSubjectDN());
}
}
}请注意,SunMSCAPI是在Java1.6上引入的,但是在Java1.7上添加了对64位版本的支持。
https://stackoverflow.com/questions/4916826
复制相似问题