Java中的MSCAPI证书选择框; SunMSCAPI?

时间:2011-02-06 23:05:39

标签: java pki client-certificates mscapi

我正在尝试相对较新的SunMSCAPI安全提供程序。我想构建一个简单的applet,提示浏览器弹出证书选择框。我会从那里拿走它。 我用一种方式用谷歌搜索了另一种方式。有什么建议吗?

2 个答案:

答案 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位版本的支持。