Проблемы с использованием Maven и SSL за прокси-сервером
Я только что загрузил Maven и пытался запустить простую команду, найденную на странице "Maven за пять минут" (http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html). это команда:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
когда я запускаю его, я получаю сообщение об ошибке с сертификатом SSL и не могу загрузить из центрального репозитория Maven по адресу https://repo.maven.apache.org/maven2. ошибка " SunCertPathBuilderException: не удается найти допустимый путь сертификации в требуемое целевое".
я сижу за корпоративным брандмауэром и правильно настроены параметры прокси-сервера как http и https открыть с помощью . Я сомневаюсь, что каждый, кто загружает Maven и запускает его в первый раз, должен импортировать SSL-сертификат репозитория Maven, поэтому проблема должна быть с прокси. У кого-нибудь есть опыт с этим?
вот трассировка стека в полном режиме отладки (- X):
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4;
2014-08-11T22:58:10+02:00)
Maven home: C:Projectsmavenbin..
Версия Java: 1.7.0_45, поставщик: Oracle Corporation
Java для дома: C:Program файлыпапку Javajdk1.7.0_45JRE и
Локаль по умолчанию: it_IT, кодировка платформы: Cp1252
Название операционной системы: "система Windows 7", версия: "6.1", арки: "для amd64", семейные: "окна"
[DEBUG] использование соединителя WagonRepositoryConnector с приоритетом 0.0 для https://repo.maven.apache.org/maven2 via *****: 8080 с
имя пользователя=*****, пароль=***
Загрузка: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
[Предупреждение] не удалось получить дескриптор плагина для организации.апаш.знаток.Плагины: maven-clean-plugin: 2.5: Plugin
орг.апаш.знаток.Плагины: maven-clean-плагин: 2.5 или один из его
не удалось разрешить зависимости: не удалось прочитать артефакт дескриптор
для организации.апаш.знаток.Плагины: maven-clean-плагин: jar: 2.5
орг.апаш.знаток.плагин.PluginResolutionException: Plugin org.апаш.знаток.Плагины: maven-clean-плагин: 2.5 или один из его
не удалось разрешить зависимости: не удалось прочитать дескриптор артефакта
для организации.апаш.знаток.Плагины: maven-clean-плагин: jar: 2.5
в орг.апаш.знаток.плагин.внутренний.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.Ява:122)
на орг.апаш.знаток.плагин.внутренний.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.Ява:148)
в орг.апаш.знаток.плагин.DefaultBuildPluginManager.loadPlugin (DefaultBuildPluginManager.Ява:81)
в орг.апаш.знаток.плагин.префикс.внутренний.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:138)
на орг.апаш.знаток.плагин.префикс.внутренний.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:121)
в орг.апаш.знаток.плагин.префикс.внутренний.DefaultPluginPrefixResolver.resolve (DefaultPluginPrefixResolver.Ява:85)
в орг.апаш.знаток.жизненный цикл.внутренний.MojoDescriptorCreator.findPluginForPrefix (MojoDescriptorCreator.java:260)
на орг.апаш.знаток.жизненный цикл.внутренний.MojoDescriptorCreator.getMojoDescriptor (MojoDescriptorCreator.java: 220)
в орг.апаш.знаток.жизненный цикл.внутренний.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java: 103)
в орг.апаш.знаток.жизненный цикл.внутренний.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.Ява:83)
на орг.апаш.знаток.жизненный цикл.внутренний.LifecycleStarter.выполнить (LifecycleStarter.Ява:85)
в орг.апаш.знаток.DefaultMaven.doExecute (DefaultMaven.java: 347)
в орг.апаш.знаток.DefaultMaven.выполнить (DefaultMaven.Ява:154)
в орг.апаш.знаток.кли.Мавенкли.execute(MavenCli.java: 582)
в орг.апаш.знаток.кли.Мавенкли.домен (MavenCli.java: 214)
в орг.апаш.знаток.кли.Мавенкли.main (MavenCli.java: 158)
на солнце.отражать.NativeMethodAccessorImpl.invoke0(собственный метод)
в Sun.отражать.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Ява:57)
в Sun.отражать.Делегирование methodaccessorimpl.invoke (DelegatingMethodAccessorImpl.Ява:43)
на Яве.ленг.отражать.Метод.метод Invoke.java: 606)
в орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.launchEnhanced (пусковая установка.java: 289)
на орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.запуска(Launcher.java: 229)
в орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.mainWithExitCode (Launcher.java:415)
в орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.главная (пусковая установка.java: 356)
Вызванные: org на.затмение.эфир.разрешение.ArtifactDescriptorException: не удалось
прочитать дескриптор артефакта для
орг.апаш.знаток.Плагины: maven-clean-плагин: jar: 2.5
на орг.апаш.знаток.хранилище.внутренний.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java: 349)
в орг.апаш.знаток.хранилище.внутренний.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java: 231)
в орг.затмение.эфир.внутренний.осущ.DefaultRepositorySystem.readArtifactDescriptor (DefaultRepositorySystem.java: 288)
на орг.апаш.знаток.плагин.внутренний.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.java: 108)
... 23 больше
Вызванные: org на.затмение.эфир.разрешение.ArtifactResolutionException: не удалось
передача артефакта орг.апаш.знаток.Плагины: maven-clean-плагин:pom: 2.5
от/до центрального (https://repo.maven.apache.org/maven2):
солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в орг.затмение.эфир.внутренний.осущ.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java: 459)
в орг.затмение.эфир.внутренний.осущ.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java: 262)
в орг.затмение.эфир.внутренний.осущ.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java: 239)
в орг.апаш.знаток.хранилище.внутренний.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:334)
... 26 Подробнее
Вызванные: org на.затмение.эфир.передача.ArtifactTransferException: не удалось передать артефакт
орг.апаш.знаток.Плагины: maven-clean-plugin:pom: 2.5 from / to central
(https://repo.maven.apache.org/maven2):
солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$6.wrap (WagonRepositoryConnector.java: 1016)
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$6.wrap (WagonRepositoryConnector.java: 1004)
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$GetTask.run (WagonRepositoryConnector.java:725)
в орг.затмение.эфир.утиль.совпадение.RunnableErrorForwarder$1.run (RunnableErrorForwarder.Ява:67)
на Яве.утиль.параллельный.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1145)
на Яве.утиль.параллельный.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
на Яве.ленг.Нитка.выполнения(резьба.java:744)
Вызванные: org на.апаш.знаток.вагон.TransferFailedException: солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в орг.апаш.знаток.вагон.услуги поставщиков.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java:935)
в орг.апаш.знаток.вагон.StreamWagon.getInputStream (StreamWagon.Ява:116)
в орг.апаш.знаток.вагон.StreamWagon.getIfNewer (StreamWagon.Ява:88)
на орг.апаш.знаток.вагон.StreamWagon.get (StreamWagon.Ява:61)
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$GetTask.run (WagonRepositoryConnector.java:660)
... 4 больше
Вызвана: класса javax.чистая.протокол SSL.SSLHandshakeException: солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
на солнце.безопасность.использование SSL.Тревоги.getSSLException (оповещения.java: 192)
в Sun.безопасность.использование SSL.SSLSocketImpl.fatal (SSLSocketImpl.java: 1884)
в Sun.безопасность.использование SSL.Рукопожатие.фатальсе (рукопожатие.java: 276)
в Sun.безопасность.использование SSL.Рукопожатие.фатальсе (рукопожатие.java:270)
в Sun.безопасность.использование SSL.ClientHandshaker.serverCertificate (ClientHandshaker.java:1341)
в Sun.безопасность.использование SSL.ClientHandshaker.processMessage (ClientHandshaker.java:153)
на солнце.безопасность.использование SSL.Рукопожатие.processLoop (Handshaker.java:868)
в Sun.безопасность.использование SSL.Рукопожатие.process_record (Handshaker.java: 804)
в Sun.безопасность.использование SSL.SSLSocketImpl.readRecord (SSLSocketImpl.java: 1016)
в Sun.безопасность.использование SSL.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1312)
в Sun.безопасность.использование SSL.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1339)
на солнце.безопасность.использование SSL.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1323)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.Коннектикут.использование SSL.SSLConnectionSocketFactory.createLayeredSocket (SSLConnectionSocketFactory.java:280)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.Коннектикут.HttpClientConnectionOperator.обновление (HttpClientConnectionOperator.java: 167)
на орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.Коннектикут.PoolingHttpClientConnectionManager.обновление (PoolingHttpClientConnectionManager.java: 329)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.MainClientExec.establishRoute (MainClientExec.java: 392)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.MainClientExec.выполнить (MainClientExec.java: 218)
на орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.Протокол.выполнить (ProtocolExec.java: 194)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.RetryExec.выполнить (RetryExec.Ява:85)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.RedirectExec.выполнить (RedirectExec.java: 108)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.клиент.InternalHttpClient.doExecute (InternalHttpClient.java: 186)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.клиент.CloseableHttpClient.выполнить (CloseableHttpClient.Ява:82)
в орг.апаш.знаток.вагон.услуги поставщиков.http.AbstractHttpClientWagon.execute (AbstractHttpClientWagon.java: 756)
в орг.апаш.знаток.вагон.услуги поставщиков.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java: 854)
... 8 более
Вызвано: солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в Sun.безопасность.валидатор.PKIXValidator.doBuild(PKIXValidator.java:385)
в Sun.безопасность.валидатор.PKIXValidator.engineValidate (PKIXValidator.java: 292)
в Sun.безопасность.валидатор.Валидатор.проверка(валидатор.java:260)
в Sun.безопасность.использование SSL.X509TrustManagerImpl.проверить (X509TrustManagerImpl.java: 326)
на солнце.безопасность.использование SSL.X509TrustManagerImpl.checkTrusted (X509TrustManagerImpl.java: 231)
в Sun.безопасность.использование SSL.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.Ява:126)
в Sun.безопасность.использование SSL.ClientHandshaker.serverCertificate (ClientHandshaker.java:1323)
... Более 27
Вызвано: солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
на солнце.безопасность.поставщик.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java: 196)
на Яве.безопасность.сертификат.CertPathBuilder.build(CertPathBuilder.java: 268)
в Sun.безопасность.валидатор.PKIXValidator.doBuild(PKIXValidator.java:380)
... 33 более
8 ответов:
дело в том, что ваш плагин maven пытается подключиться к удаленному репозиторию https
(например https://repo.maven.apache.org/maven2/)это новое подключение SSL для Maven Central было доступно в августе 2014 года !
поэтому, пожалуйста, вы можете проверить, что ваши настройки.XML имеет правильную конфигурацию.
<settings> <activeProfiles> <!--make the profile active all the time --> <activeProfile>securecentral</activeProfile> </activeProfiles> <profiles> <profile> <id>securecentral</id> <!--Override the repository (and pluginRepository) "central" from the Maven Super POM --> <repositories> <repository> <id>central</id> <url>http://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories> </profile> </profiles> </settings>вы можете также использовать простой репозиторий http maven, как это
<pluginRepositories> <pluginRepository> <id>central</id> <name>Maven Plugin Repository</name> <url>http://repo1.maven.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> </pluginRepositories>пожалуйста, дайте мне знаю, если мое решение работает ;)
J.
ответ выше является хорошим рабочим решением, но вот как это сделать, если вы хотите использовать РЕПО SSL:
- используйте браузер (я использовал IE), чтобы перейти к https://repo.maven.apache.org/
- нажмите на значок блокировки и выберите "Просмотр сертификата"
- перейдите на вкладку " Детали "и выберите"Сохранить в файл"
- выберите тип " Base 64 X. 509 (.CER) " и сохранить его где-нибудь
теперь откройте командную подскажите и введите (используйте свои собственные пути):
keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystoreтеперь вы можете запустить команду снова с параметром
-Djavax.net.ssl.trustStore=C:\temp\mavenKeystoreпод linux используйте абсолютный путь
-Djavax.net.ssl.trustStore=/tmp/mavenKeystoreиначе этой будет
такой:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystoreдополнительно:
вы можете использовать элемент
MAVEN_OPTSпеременная окружения, так что вам не придется беспокоиться об этом снова. Смотрите дополнительную информацию оMAVEN_OPTSпеременная здесь:
обновление
Я просто наткнулся на этот отчет об ошибке:
https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760
это, кажется, причина наших проблем здесь. Что-то с ca-сертификатами-java сталкивается с ошибкой и не полностью заполняет cacerts. Для меня это началось после того, как я обновился до 15.10, и эта ошибка, вероятно, произошла во время этого процесса.
обходной путь заключается в выполнении следующая команда:
судо /ВАР/Либ/с dpkg/информация/центр сертификации-сертификаты-Ява.послеустановочных настроить
Если вы проверите содержимое хранилища ключей (как в моем исходном ответе), теперь вы увидите еще целую кучу, включая необходимый глобальный корневой ЦС DigiCert.
Если вы прошли через процесс в моем исходном ответе, вы можете очистить ключ, который мы добавили, выполнив эту команду (при условии, что вы не указали другой псевдоним):
судо ключей -удалить -псевдоним систему MyKey -хранилище файл /etc/ssl и сертификаты/Ява/cacerts в
Maven теперь будет работать нормально.
Оригинальный Ответ
Я просто хотел бы расширить ответ Энди о добавлении сертификата и указании хранилища ключей. Это заставило меня начать, и в сочетании с информацией в другом месте я смог понять проблему и найти другую (лучше?) решение.
ответ Энди указывает новое хранилище ключей с Maven в частности, сертификат. Здесь я собираюсь немного шире и добавляю корневой сертификат в хранилище доверия java по умолчанию. Это позволяет мне использовать mvn (и другие java-материалы) без указания хранилища ключей.
для справки моя ОС Ubuntu 15.10 с Maven 3.3.3.
в принципе, хранилище доверия java по умолчанию в этой установке не доверяет корневому сертификату Maven repo (DigiCert Global Root CA), поэтому его необходимо добавить.
Я нашел его здесь и скачано:
https://www.digicert.com/digicert-root-certificates.htm
затем я нашел расположение truststore по умолчанию, которое находится здесь:
/etc / ssl / certs/java / cacerts
вы можете увидеть, какие сертификаты в настоящее время находятся там, выполнив эту команду:
keytool-list-keystore / etc / ssl/certs/java / cacerts
при появлении запроса пароль хранилища ключей по умолчанию "изменяется" (но никто никогда не делает).
в моей настройке отпечаток пальца " DigiCert Global Root CA "не существовал (DigiCert называет его" отпечаток пальца " в ссылке выше). Так вот как его добавить:
sudo keytool-import-file DigiCertGlobalRootCA.ЭЛТ-хранилище ключей /etc / ssl / certs/java / cacerts
Это должно подсказать, если Вы доверяете сертификату, скажите да.
используйте keytool-list еще раз, чтобы убедиться, что ключ существует. Я не стал укажите псевдоним (- alias), чтобы все закончилось так:
mykey, Dec 2, 2015, trustedCertEntry, отпечаток пальца сертификата (SHA1): А8:98:5Д:3А:65:Е5:Е5:С4:В2:Д7:Д6:6Д:40:С6:ДД:2-ой этаж:В1:9С:54:36
затем я смог запустить команды mvn как обычно, не нужно указывать хранилище ключей.
вы можете импортировать сертификат SSL вручную и просто добавить его в хранилище ключей.
для пользователей Linux
синтаксис:
keytool-trustcacerts-keystore /jre / lib / security/cacerts - storepass changeit-importcert-псевдоним nexus-file
пример :
keytool-trustcacerts-keystore / Library / Java/JavaVirtualMachines / jdk1.8.0_144.jdk / Contents / Home/jre / lib / security/cacerts - storepass changeit -importcert -псевдоним Нексус -файл ~/загрузки/Азбука.по COM-протоколу SSL.ЭЛТ
У меня на самом деле была та же проблема.
когда я запускаю
mvn чистый пакет
в моем проекте maven я получаю эту ошибку сертификата с помощью инструмента maven.
Я следил за ответом @Andy до того момента, когда я загрузил .cer file
после этого остальная часть ответа не сработала для меня, но я сделал следующее (Я работаю на машине Linux Debian)
в первую очередь, беги:
keytool-list-keystore "Java path+" /jre / lib / security/cacerts""
например, в моем случае это:
ключей -список -хранилища в /usr/lib в/в JVM/JDK версии-8-оракул-arm32-ВФП-hflt/среда jre/lib/безопасности/cacerts в
если он спрашивает о пароле, просто нажмите enter.
эта команда должна перечислить все сертификаты ssl, принятые java. когда я запустил эту команду, в моем случае я получил 93 сертификаты например.
теперь добавьте загруженный файл .cer до cacerts файл, выполнив следующую команду:
sudo keytool-importcert-file/home/hal/Public / certificate_file_downloaded.ССВ -хранилища в /usr/lib в/в JVM/JDK версии-8-оракул-arm32-ВФП-hflt/JRE и/безопасности/cacerts в
напишите свой пароль sudo, тогда он спросит вас о keystore password
по умолчанию changeit
сказать y что Вы доверяете этому сертификату.Если вы выполните команду
ключей -список -хранилища в /usr/lib в/в JVM/JDK версии-8-оракул-arm32-ВФП-hflt/среда jre/lib/безопасности/cacerts в
еще раз, в моем случае, я получил 94 содержание cacerts file
Это означает, что он был добавлен успешно.
Если эта проблема происходит для HTTPS репозиторий, f. e.https://repo.spring.io/milestone Вы можете просто попробовать заменить на не обеспеченные: http://repo.spring.io/milestone. И это все
Я получал ту же ошибку о сертификате SSL, когда Maven попытался автоматически загрузить необходимые модули.
В качестве средства защиты я пытался реализовать ответ Люка выше, но обнаружил, что глобальный корневой сертификат CA DigiCert уже находится в доверенном хранилище ключей Java.
Что помогло мне было добавление%JAVA_HOME%\binк переменной Path (я запускаю Windows). И%JAVA_HOME%это расположение JDK, а не только расположение JRE, так как Maven нуждается в JDK.
Я не конечно, это помогло, но все же помогло. Я абсолютно уверен, что это было единственное, что я изменил.
Comments