Окно выбора сертификата MSCAPI на Java;SunMSCAPI? - PullRequest
3 голосов
/ 07 февраля 2011

Я экспериментирую с относительно новым поставщиком безопасности SunMSCAPI. Я хочу создать простой апплет, который предлагает браузеру открыть окно выбора сертификата. Я возьму это оттуда. Я гуглил это в одну сторону, а в другую. Любой совет?

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Я работаю (борюсь) над чем-то похожим - хотя и для не веб-приложения. Единственное решение, которое до сих пор работало для меня, - это сделать JNI для C # (обернутый с помощью MCPP) ..

0 голосов
/ 26 сентября 2016

Вы можете использовать провайдера 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);

Обратите внимание, что он, вероятно, уже добавлен по умолчанию в список поставщиков безопасности для установки java в ОС Windows.

По вашему вопросу не так много подробностей, поэтому я приведу пример, например, чтобы показать все псевдонимы и темы, связанные с ними.сертификаты из хранилища ключей 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-битной версии.

...