Есть ли какой-либо java API для преобразования сертификата из формата «DER» в формат pkcs # 12

Мне нужно преобразовать сертификат из формата DER в формат pkcs#12. Я знаю, что могу сделать это с помощью команды openssl. Я ищу java API/класс, который может выполнять эту работу. Любая помощь будет оценена.


person Unicorn    schedule 07.12.2010    source источник
comment
Сертификат содержит только открытый ключ и идентифицирующую информацию, тогда как в большинстве случаев формат pkcs#12 предполагает наличие в файле pkcs#12 как открытого, так и закрытого ключа. Я не знаю ни одного приложения, которое ожидает, что открытые ключи будут в формате pkcs#12.   -  person President James K. Polk    schedule 09.12.2010


Ответы (4)


Вы можете попробовать загрузить контейнер PKCS#12 в качестве хранилища ключей:

java.security.KeyStore ks = java.security.KeyStore.getInstance("PKCS12");
ks.load(new java.io.FileInputStream("yourStore.p12"), "yourPassword".toCharArray());

После загрузки вы можете перечислить элементы внутри контейнера:

for(Enumeration enum = ks.aliases(); enum.hasMoreElements(); ) {
    String alias = (String) enum.nextElement();
    System.out.println("@:" + alias);
    if (ks.isKeyEntry(alias)) {
        System.out.println("return PrivateKey");
        PrivateKey pk = (PrivateKey) ks.getKey(alias, password);
        // ...
    }
}
person Laurent Etiemble    schedule 07.12.2010

Насколько я понимаю, PEM — это просто закодированная в Base64 строка содержимого DER с соответствующими строками заголовка и нижнего колонтитула. Например, для преобразования в Base64 вы можете использовать javax.mail.internet.MimeUtility.

person raymi    schedule 07.12.2010

Это может конвертировать pkcs из PEM

openssl pkcs12 -export -in pem-certificate-and-key-file -out pkcs-12-certificate and-key-file

Итак, давайте сначала конвертируем ваш DER в PEM.

openssl dsa -inform PEM|DER -outform DER|PEM -in pem-file|der-file -out der-file|pem-file
person Jinesh Parekh    schedule 07.12.2010
comment
Я знаю, что openssl может это сделать, ища java API, который может делать то же самое. - person Unicorn; 07.12.2010
comment
@Unicorn - Вы не можете использовать System.getRuntime() для их выполнения? - person Jinesh Parekh; 07.12.2010
comment
Это не Java API. - person jww; 01.04.2014

Я получил много миль от Portecle.

Если вам нужно сделать это программно, большая часть того, что вам нужно, находится в классе KeyStore в Java. Что касается удобства для пользователя, то он довольно избирательно относится к своим друзьям. Откройте магазин, добавьте в него, сохраните его. Если вам нужны цепочки сертификатов, это будет немного сложнее.

Что касается получения сертификата из кодировки DER, см. X509Certificate javadoc. Особенно ссылки на CertificateFactory.

person Jason    schedule 07.12.2010