首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的MSCAPI证书选择框;SunMSCAPI?

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

Stack Overflow用户
提问于 2011-02-07 07:05:39
回答 2查看 1.8K关注 0票数 3

我正在试验相对较新的SunMSCAPI安全提供商。我想构建一个简单的applet,它会提示浏览器弹出证书选择框。我从那开始接手。我用谷歌一种方式搜索了一下,然后又用另一种方式搜索了一下。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2011-02-09 04:07:09

我正在努力做一些类似的东西--尽管是一个非web应用程序。到目前为止,唯一对我有效的解决方案是对C#执行JNI (使用MCPP封装)。

票数 1
EN

Stack Overflow用户

发布于 2016-09-26 17:41:36

可以使用SunMSCAPI提供程序实例化本地客户端windows密钥库。只需使用以下代码即可完成此操作:

代码语言:javascript
复制
KeyStore keyStore = KeyStore.getInstance("Windows-MY",new SunMSCAPI());
keyStore.load(null, null);

或者,如果您愿意,可以将提供程序添加到安全列表中,而不是将其传递给getInstance()调用:

代码语言:javascript
复制
SunMSCAPI providerMSCAPI = new SunMSCAPI();
Security.addProvider(providerMSCAPI);
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);

请注意,默认情况下,它可能已经添加到windows OS上的java安装的安全提供商列表中。

关于你的问题没有太多的细节,所以我给你一个例子来展示来自本地客户端windows keystore的相关证书的所有别名和主题,以说明这个提供者的用法:

代码语言:javascript
复制
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位版本的支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4916826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档