Keytool Ошибка Keytool: java.lang.Exception: ввод не сертификат X.509
Попытка добавить сертификат в хранилище ключей, чтобы я мог использовать его в приложении на основе Java. Это новая концепция для меня.
У меня есть сертификат.p7b для сайта, и я собрал команду keytool. Когда я ввожу его, мне предлагается указать pwd, а затем мне предлагают следующую ошибку
keytool error: java.lang.Exception: Input not an X.509 certificate
Кто-нибудь может дать понимание?
C:\Users\Desktop\>keytool -import -trustcacerts -file "service.site.com - SSL Cert.p7b" -keystore service.site.com.jks
Enter keystore password:
Re-enter new password:
keytool error: java.lang.Exception: Input not an X.509 certificate
1 ответ
Вы можете попробовать преобразовать ключ в CER (X509), а затем попытаться импортировать его:
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
Я столкнулся с подобной проблемой, хотя я пытался импортировать файл.pem. Файл содержал только один сертификат в удобной для чтения форме и инкапсулирован в ––BEGIN CERTIFICATE—– и ––END CERTIFICATE—–. В Java 7 (патч 71) keytool не удалось разобрать такой файл и выдал ту же ошибку, что вы получили. Однажды я удалил текстовую часть файла:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 11864724255945479761 (0xa4a7f7d949c31d11)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=COM, ST=CA, O=Company, OU=ORG, CN=ORG/emailAddress=admin@company.org
Validity
Not Before: Jan 5 15:30:35 2015 GMT
Not After : Jan 2 15:30:35 2025 GMT
это сработало хорошо для меня.
Пожалуйста, ознакомьтесь также со следующей статьей ( https://myonlineusb.wordpress.com/2011/06/19/what-are-the-differences-between-pem-der-p7bpkcs7-pfxpkcs12-certificates/), в которой объясняется различия между различными форматами и предоставляет команды, как конвертировать из одного формата в другой
Я столкнулся с той же ошибкой при импорте сертификата с помощью keytool. Начиная с версии Java 6, в keytool было добавлено усовершенствование, а именно то, что keytool может объединять и импортировать хранилища ключей в формате PKCS12. Я согласен с ответом Тазарова, вам необходимо преобразовать формат PKCS#7 или P7B (который в основном хранится в формате Base64 ASCII и имеет расширение файла.p7b или.p7c).
Прежде чем перейти к решению, думаю, стоит уточнить некоторые понятия. Я приведу нижеприведенные концепции из превосходной книги: Пуленепробиваемые SSL и TLS Ивана Ристича Copyright © 2015 Feisty Duck Limited. Все права защищены.
Сертификаты PKCS#7 Сложный формат, разработанный для транспортировки подписанных или зашифрованных данных, определенный в RFC 2315. Обычно он встречается с расширениями.p7b и.p7c и может при необходимости включать всю цепочку сертификатов. Этот формат поддерживается утилитой keytool Java.
Бинарный (DER) сертификат Содержит сертификат X.509 в необработанном виде с использованием кодировки DER ASN.1.
Сертификат (ы) ASCII (PEM) Содержит сертификат DER в кодировке base64, в котором -----BEGIN CERTIFICATE----- используется в качестве заголовка, а -----END CERTIFICATE----- в качестве нижнего колонтитула. Обычно виден только с одним сертификатом на файл, хотя некоторые программы допускают более одного сертификата в зависимости от контекста. Например, веб-сервер Apache требует, чтобы сертификат сервера был один в одном файле, а все промежуточные сертификаты - в другом.
РЕШЕНИЕ
Выбрать и преобразовать:
openssl s_client -showcerts -connect "service.site.com - SSL Cert.p7b":443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem
Надеюсь, поможет!