Подтвердить что ты не робот

Ошибка Импорт сертификата SSL: не сертификат X.509

Я пытаюсь обновить сертификат SSL в соответствии с этот пост ,

В сертификатах я noob, поэтому я последовал за этим руководством. Но, когда я вхожу

keytool -keystore mycacerts -storepass changeit -importcert -file "C:\Users\Noks\Desktop\cacerts.pem" -v

Я получаю сообщение об ошибке:

keytool error: java.lang.Exception: Input not an X.509 certificate
java.lang.Exception: Input not an X.509 certificate
        at sun.security.tools.KeyTool.addTrustedCert(KeyTool.java:1913)
        at sun.security.tools.KeyTool.doCommands(KeyTool.java:818)
        at sun.security.tools.KeyTool.run(KeyTool.java:172)
        at sun.security.tools.KeyTool.main(KeyTool.java:166)

Как это исправить?

4b9b3361

Ответ 1

Имеется ли в файле cacerts.pem один сертификат? Поскольку это PEM, посмотрите на него, он должен начинаться с

-----BEGIN CERTIFICATE-----

и закончите с

-----END CERTIFICATE-----

Наконец, чтобы проверить, не поврежден ли, откройте openssl и распечатайте его данные, используя

openssl x509 -in cacerts.pem -text

Ответ 2

Многие ЦС предоставят сертификат в формате PKCS7.

Согласно документации Oracle, команда keytool может обрабатывать PKCS # 7, но иногда она терпит неудачу

Команда keytool может импортировать сертификаты X.509 v1, v2 и v3 и PKCS # 7 отформатированные цепи сертификатов, состоящие из сертификатов этого тип. Данные, которые необходимо импортировать, должны быть предоставлены либо в двоичном формате формат кодирования или формат печатаемого кодирования (также известный как Base64 кодирование), как определено стандартом Internet RFC 1421. В последнем case, кодировка должна быть ограничена в начале строкой, которая начинается с ----- BEGIN и ограничивается в конце строкой, которая начинается с ----- END.

Если файл PKCS7 нельзя импортировать, попробуйте преобразовать его из PKCS7 в X.509:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

Ответ 3

Это похоже на старый поток, но я добавлю свой опыт здесь. Я также пытался установить сертификат и получил эту ошибку. Затем я открыл файл cer с помощью txt-редактора и заметил, что в конце каждой строки есть дополнительное пространство (символ). Удаление этих строк позволило мне импортировать сертификат.

Надеюсь, что это кому-то стоит.

Ответ 4

Я также добавлю сюда свой опыт, если он кому-нибудь поможет:

На работе мы обычно используем следующие две команды, чтобы позволить IntelliJ IDEA взаимодействовать с различными серверами, например, с нашими внутренними репозиториями maven:

[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool 
    -printcert -rfc -sslserver maven.services.{our-company}.com:443 > public.crt

[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool
    -import -storepass changeit -noprompt -trustcacerts -alias services.{our-company}.com 
    -keystore lib\security\cacerts -file public.crt

Теперь иногда случается, что команда keytool -printcert не может установить связь с внешним миром из-за временных проблем с подключением, таких как брандмауэр, препятствующий этому, пользователь забыл запустить VPN, что угодно. Это факт жизни, что это может произойти. Это на самом деле не проблема.

Проблема в том, что, когда тупой инструмент встречает такую ошибку, он не выдает сообщение об ошибке на стандартное устройство ошибки, он отправляет его на стандартное устройство вывода!

Итак, вот что в итоге происходит:

  • Когда вы выполняете первую команду, вы не видите никакого сообщения об ошибке, поэтому вы не знаете, что оно не удалось. Однако вместо ключа файл public.crt теперь содержит сообщение об ошибке, в котором говорится keytool error: java.lang.Exception: No certificate from the SSL server.
  • Когда вы выполняете вторую команду, она находит сообщение об ошибке вместо ключа в public.crt, поэтому происходит сбой, сообщая keytool error: java.lang.Exception: Input not an X.509 certificate.

Итог: после keytool -printcert... > public.crt всегда keytool -printcert... > public.crt содержимое public.crt чтобы удостовериться, что это действительно ключ, а не сообщение об ошибке, прежде чем приступить к запуску keytool -import... -file public.crt

Ответ 5

Я изменил 3 вещи, и тогда это работает:

  1. Есть столбец пробелов, я их убрал
  2. Изменен разрыв строки с Windows CRLF на Linux LF
  3. Убрана пустая строка в конце.