我正在尝试相对较新的SunMSCAPI安全提供程序。我想构建一个简单的applet,提示浏览器弹出证书选择框。我会从那里拿走它。 我用一种方式用谷歌搜索了另一种方式。有什么建议吗?
答案 0 :(得分:1)
我在类似的东西上工作(挣扎) - 虽然对于非网络应用程序..到目前为止唯一对我有用的解决方案 - 做一个JNI到C#(用MCPP包装)..
答案 1 :(得分:0)
您可以使用SunMSCAPI
提供程序来实例化本地客户端窗口密钥库。您只需使用以下代码即可:
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操作系统上的Java安装的安全提供程序列表中。
您的问题没有太多详细信息,因此我举例说明了本地客户端Windows密钥库中的所有别名和相关证书的主题,以说明此提供程序的使用:
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是在java 1.6上引入的,但是在java 1.7上添加了对64位版本的支持。