Вопрос или проблема
Моя программа на Java не может загрузить https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-spark-extensions-3.5_2.12/1.5.2/iceberg-spark-extensions-3.5_2.12-1.5.2.pom
Поэтому я выполнил несколько команд, чтобы выяснить, в чем дело. Первые шаги заключаются в том, чтобы выяснить, какой сертификат CA мне нужен для проверки сертификатов. Для этого я сначала получил полный цепочку сертификатов с URL, с которого пытался скачать:
openssl s_client -connect repo1.maven.org:443 -showcerts </dev/null 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > fullchain.pem
Я получил все сертификаты CA Global Sign для TLS и общего назначения с официального сайта. Затем я по одному запустил openssl для их проверки.
➜ certs openssl verify -CAfile root-R1.crt fullchain.pem
CN=repo1.maven.org
ошибка 20 на уровне 0 поиска: невозможно получить локальный сертификат издателя
ошибка fullchain.pem: проверка не удалась
➜ certs openssl verify -CAfile root-R3.crt fullchain.pem
CN=repo1.maven.org
ошибка 20 на уровне 0 поиска: невозможно получить локальный сертификат издателя
ошибка fullchain.pem: проверка не удалась
➜ certs openssl verify -CAfile root-R5.crt fullchain.pem
CN=repo1.maven.org
ошибка 20 на уровне 0 поиска: невозможно получить локальный сертификат издателя
ошибка fullchain.pem: проверка не удалась
➜ certs openssl verify -CAfile root-r6.crt fullchain.pem
CN=repo1.maven.org
ошибка 20 на уровне 0 поиска: невозможно получить локальный сертификат издателя
ошибка fullchain.pem: проверка не удалась
Теперь я в тупике. Как мне найти CA, который может проверить этот сертификат?
Ответ или решение
Чтобы понять, почему ни один из сертификатов корневого Центра Сертификации (CA) GlobalSign не может проверить сертификат, подписанный GlobalSign, необходимо рассмотреть несколько ключевых аспектов, связанных с цепочкой сертификатов, способностями вашего клиента и самими сертификатами.
1. Проверка цепочки сертификатов
Для успешной проверки сертификата требуется полная цепочка доверия. Это значит, что каждый промежуточный и корневой сертификат в цепочке должен быть доступен и проверен на консистентность. Сообщение об ошибке unable to get local issuer certificate
обычно указывает на то, что OpenSSL не может найти или не распознает промежуточный сертификат, который подписал предоставленный вами сертификат.
2. Общая структура сертификатов
Когда вы получаете сертификат с удаленного сервера (в данном случае repo1.maven.org
), вы получаете не только сам сертификат сервера, но и цепочку сертификатов, которая может включать один или несколько промежуточных сертификатов. Чтобы корректно выполнить проверку, нужно удостовериться, что эти сертификаты присутствуют и доступны.
3. Корневые и промежуточные сертификаты
Каждый корневой сертификат (например, root-R1.crt
, root-R3.crt
и т.д.), который вы проверяете, лишь начало цепочки. Они не могут проверить сертификат непосредственно, если для этого нет соответствующего промежуточного сертификата, который вызывает связь между вашим сертификатом и корневым CA.
Чтобы решить эту проблему, выполните следующие шаги:
4. Получение промежуточных сертификатов
Убедитесь, что вы скачали промежуточные сертификаты, которые могут быть подписаны корневым CA GlobalSign. Посетите официальный сайт GlobalSign и убедитесь, что у вас есть актуальные версии промежуточных сертификатов. Зачастую, промежуточные сертификаты предоставляются в комплекте с корневыми сертификатами, но могут отсутствовать.
5. Проверка с использованием промежуточных сертификатов
Создайте файл, который будет содержать как корневые, так и промежуточные сертификаты. Это можно сделать следующим образом:
cat root-R1.crt intermediate.crt > full_CA_chain.pem
Теперь проверьте ваш fullchain.pem
с использованием полного набора certificats:
openssl verify -CAfile full_CA_chain.pem fullchain.pem
6. Убедитесь в корректности конфигурации клиента
Также проверьте настройки клиента Java. Иногда проблемы с отключенной или устаревшей библиотекой доверенных сертификатов могут нарушать процесс проверки сертификатов.
7. Заключение
Неполадка в верификации сертификатов может заключаться в нескольких моментах: отсутствующих промежуточных сертификатах, неправильных настройках клиента или даже несоответствии версий. Убедитесь, что вы обладаете всеми необходимыми сертификатами и что ваш клиент настроен корректно. Эти шаги обеспечат надежную проверку сертификатов, подписанных GlobalSign, и высвободят путь к загружаемым ресурсам.
Надеюсь, эта информация окажется полезной для диагностики проблемы и поможет вам успешно подключиться к repo1.maven.org
.