Ошибка Импорт сертификата 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)
Как это исправить?
Ответы
Ответ 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 вещи, и тогда это работает:
- Есть столбец пробелов, я их убрал
- Изменен разрыв строки с Windows CRLF на Linux LF
- Убрана пустая строка в конце.