Проблемы с использованием Maven и SSL за прокси


134

Я только что загрузил 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доступа через settings.xmlфайл. Я сомневаюсь, что каждый, кто скачивает 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:\Projects\maven\bin\..
    Java version: 1.7.0_45, vendor: Oracle Corporation
    Java home: C:\Program Files\Java\jdk1.7.0_45\jre
    Default locale: it_IT, platform encoding: Cp1252
    OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
    [DEBUG] Using connector WagonRepositoryConnector with priority 0.0 for https://repo.maven.apache.org/maven2 via *****:8080 with username=*****, password=***
    Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
    [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
    org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
            at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:122)
            at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:148)
            at org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java:81)
            at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:138)
            at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:121)
            at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)
            at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)
            at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220)
            at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)
            at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:83)
            at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
            at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
            at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
            at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
            at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
            at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
            at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
            at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:349)
            at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:231)
            at org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:288)
            at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)
            ... 23 more
    Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
            at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
            at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
            at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)
            ... 26 more
    Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1016)
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1004)
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:725)
            at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
            at java.lang.Thread.run(Thread.java:744)
    Caused by: org.apache.maven.wagon.TransferFailedException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:935)
            at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)
            at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
            at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:660)
            ... 4 more
    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
            at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
            at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
            at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
            at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
            at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
            at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
            at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
            at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
            at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
            at org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:280)
            at org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator.java:167)
            at org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:392)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:218)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:85)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
            at org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
            at org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
            at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:756)
            at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)
            ... 8 more
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
            at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
            at sun.security.validator.Validator.validate(Validator.java:260)
            at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
            at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
            at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
            at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
            ... 27 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
            at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
            at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
            ... 33 more

2
Я решил это после ответа rec, чтобы игнорировать проверку сертификата SSL.
Evin1_

Ответы:


182

Дело в том, что ваш плагин maven пытается подключиться к удаленному репозиторию https
(например, https://repo.maven.apache.org/maven2/ )

Это новое соединение SSL для Maven Central было доступно в августе 2014 года!

Итак, пожалуйста, можете ли вы убедиться, что ваш файл settings.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.


2
Спасибо за быстрый и точный ответ, у меня это сработало и, вероятно, поможет многим людям, которые начнут использовать maven после августа 2014 года :-) А пока я понял, как заставить его работать с SSL. Я отправлю его в качестве ответа ниже, чтобы помочь другим, но ваш ответ будет официально принятым. Спасибо
Энди

Спасибо Энди;) Оба решения у тебя работают? или просто альтернатива?
biology.info

4
Да, я попробовал, и он работает. Однако в первом блоке кода мне пришлось изменить оба URL-адреса репозитория с https на http, иначе я получил то же сообщение об ошибке, что и раньше. Кроме того, всем, кто пытается это сделать, не забудьте тег <activeProfiles>.
Энди

1
Просто попробовал со вторым альтернативным простым солнцем, у меня это сработало ... Спасибо.
Blue Diamond

7
С 15 января 2020 года центральный репозиторий больше не поддерживает небезопасную связь по обычному протоколу HTTP и требует, чтобы все запросы к репозиторию были зашифрованы через HTTPS.
Ахмад Алхатиб

183

Приведенный выше ответ - хорошее рабочее решение, но вот как это сделать, если вы хотите использовать репозиторий 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переменной здесь :


15
Это следует принять как правильный ответ. Ваш прокси-сервер ISA вставляет промежуточный сертификат, которому JDK не доверяет.
Гордон

2
У меня maven работает через командную строку. Как мне заставить его работать при затмении?
Прабодх Мхалги,

Простая паста для MAVEN_OPTS: -Xmx512m -Djavax.net.ssl.trustStore = trust.jks -Djavax.net.ssl.trustStorePassword = -Djavax.net.ssl.keyStore = / home / directory / mycertificate.p12 - Djavax.net.ssl.keyStoreType = pkcs12 -Djavax.net.ssl.keyStorePassword = XXXXXX
Эл Лелопат

Это решило мою проблему. Когда он запрашивает пароль хранилища ключей, по умолчанию используется «changeit», если вы еще не изменили его. :)
Джон Манко

3
Кроме того, в Ubuntu вы можете запустить такую ​​команду, какsudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
John Manko,

23

Обновить

Я только что наткнулся на этот отчет об ошибке:

https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760

Похоже, это причина наших проблем здесь. Что-то с ca-сертификатами-java обнаруживает ошибку и не полностью заполняет cacerts. Для меня это началось после того, как я обновился до 15.10, и эта ошибка, вероятно, возникла во время этого процесса.

Обходной путь - выполнить следующую команду:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst настроить

Если вы проверите содержимое хранилища ключей (как в моем исходном ответе), вы увидите гораздо больше, включая необходимый DigiCert Global Root CA.

Если вы прошли этот процесс в моем исходном ответе, вы можете очистить добавленный нами ключ, выполнив эту команду (при условии, что вы не указали другой псевдоним):

sudo keytool -delete -alias mykey -keystore / etc / ssl / certs / java / cacerts

Maven теперь будет работать нормально.


Оригинальный ответ

Я просто хотел бы подробнее рассказать об ответе Энди о добавлении сертификата и указании хранилища ключей. Это заставило меня начать, и в сочетании с информацией из других источников я смог понять проблему и найти другое (лучшее?) Решение.

В ответе Энди указано новое хранилище ключей с сертификатом Maven. Здесь я немного шире и добавлю корневой сертификат в хранилище доверенных сертификатов Java по умолчанию. Это позволяет мне использовать mvn (и другие java-файлы) без указания хранилища ключей.

Для справки, моя ОС - Ubuntu 15.10 с Maven 3.3.3.

По сути, хранилище доверенных сертификатов Java по умолчанию в этой настройке не доверяет корневому сертификату репозитория Maven (DigiCert Global Root CA), поэтому его необходимо добавить.

Нашел здесь и скачал:

https://www.digicert.com/digicert-root-certificates.htm

Затем я нашел расположение хранилища доверенных сертификатов по умолчанию, которое находится здесь:

/ И т.д. / SSL / сертификаты / Java / cacerts

Вы можете увидеть, какие сертификаты сейчас там есть, выполнив эту команду:

keytool -list -keystore / etc / ssl / certs / java / cacerts

При появлении запроса пароль хранилища ключей по умолчанию - «changeit» (но никто этого не делает).

В моей настройке отпечатка пальца «DigiCert Global Root CA» не существовало (DigiCert называет его «отпечатком пальца» в приведенной выше ссылке). Вот как это добавить:

sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore / etc / ssl / certs / java / cacerts

Это должно подсказать, если вы доверяете сертификату, скажите «да».

Снова используйте keytool -list, чтобы убедиться, что ключ существует. Я не стал указывать псевдоним (-alias), поэтому получилось так:

mykey, 2 декабря 2015 г., trustedCertEntry, отпечаток сертификата (SHA1): A8: 98: 5D: 3A: 65: E5: E5: C4: B2: D7: D6: 6D: 40: C6: DD: 2F: B1: 9C : 54: 36

Затем я смог запускать команды mvn как обычно, без необходимости указывать хранилище ключей.


Спасибо Энди. И Лиланду, который репостил свой блог. nodsw.com/blog/leeland/2006/12/… И тебе тоже, @ Люк.
аджоши

13

Вы можете использовать -Dmaven.wagon.http.ssl.insecure=trueопцию


11

Вы можете импортировать сертификат SSL вручную и просто добавить его в хранилище ключей.

Для пользователей Linux:

Синтаксис:

keytool -trustcacerts -keystore / jre / lib / security / cacerts -storepass changeit -importcert -alias nexus -file

Пример :

keytool -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -importcert -alias nexus -file ~ / Downloads / abc.com-ssl. катодно-лучевая трубка


Сначала вам все равно нужно сохранить сертификат, как описано в ответе Энди . Таким образом, расширение будет «.cer».
sjngm

9

Возможно, это не лучшее решение. Я изменил свой maven с 3.3.x на 3.2.x. И эта проблема ушла.


Я безуспешно пытался установить сертификаты в течение пары часов, и это решение, наконец, сработало! Последняя версия maven, с которой мне пришлось работать, была 3.2.2.
jlars62

3.3.3 и 3.2.5 у меня не работали, но 3.0.5 работал
ROMANIA_engineer

Я попал сюда из поисковой системы, но использую Gradle вместо Maven. Обновление моей более старой версии Gradle также устранило эти странные проблемы с SSL.
Ник Рейман

6

У меня действительно была такая же проблема.

когда я бегу

mvn чистый пакет

в моем проекте maven я получаю эту ошибку сертификата с помощью инструмента maven.

Я следил за ответом @Andy до того момента, пока не загрузил файл .cer

после этого остальная часть ответа у меня не сработала, но я сделал следующее (я работаю на машине Linux Debian)

в первую очередь запустите:

keytool -list -keystore "Путь Java +" / jre / lib / security / cacerts ""

например, в моем случае это:

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

если он спрашивает о пароле, просто нажмите Enter.

эта команда должна перечислить все сертификаты ssl, принятые java. когда я запустил эту команду, в моем случае я получил, например, 93 сертификата.

Теперь добавьте загруженный файл .cer в файл cacerts , выполнив следующую команду:

sudo keytool -importcert -file /home/hal/Public/certificate_file_downloaded.cer -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / security / cacerts

напишите свой пароль sudo, тогда он спросит вас о пароле хранилища ключей

по умолчанию - изменить

то говорят у , что вы доверяете этот сертификат.

если вы запустите команду

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

еще раз, в моем случае я получил 94 содержимого файла cacerts

значит, он был успешно добавлен.


2

Быстрое решение - добавить этот код в свой pom.xml:

<repositories>
    <repository>
        <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>
    </repository>
</repositories>

Где никогда не бывает поисков сертифицированного.


1
В ветке ответов стоит прокрутить вниз. Это сработало просто!
серебро

1

Я получал ту же ошибку с сертификатом SSL, когда Maven пытался автоматически загрузить необходимые модули.
В качестве средства правовой защиты я пытался реализовать ответ Люка, приведенный выше, но обнаружил, что сертификат DigiCert Global Root CA уже находится в доверенном хранилище ключей Java.

Что мне помогло, так это добавление %JAVA_HOME%\binпеременной Path (я работаю в Windows). И %JAVA_HOME%это местоположение JDK, а не просто местоположение JRE, поскольку Maven нуждается в JDK.
Я не уверен, почему это помогло, но помогло. Я абсолютно уверен, что это единственное, что я изменил.



1

Шаг 1: ПОЛУЧИТЕ содержимое сертификата веб-сайта (вы хотите, чтобы он был импортирован как доверенный корень)

$ keytool -printcert -rfc -sslserver maven.2xoffice.com*

-----BEGIN CERTIFICATE-----
MIIFNTCCBB2gAwIBAgIHJ73QrVnyJjANBgkqhkiG9w0BAQsFADCBtDELMAkGA1UEBhMCVVMxEDAO
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMxITAfBgNVBAoT
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
...
-----END CERTIFICATE-----
The -rfc option outputs the certificate chain in PEM-encoded format for easy import back into a keystore.

Шаг 2: Сохраните все это (включая строки BEGIN CERTIFICATE и END CERTIFICATE, которые в данном случае важны) как godaddyg2.pem и импортируйте его в мое хранилище доверенных сертификатов через:

Шаг 3. Импортируйте сертификат в хранилище ключей (хранилище доверенных ключей Java)

$ keytool -importcert -file ./godaddyg2.pem -keystore $JRE_LIB/lib/security/cacerts

1

Что сработало для меня:

Настройте <proxy>параметры в ${MAVEN_HOME}/conf/settings.xml:

(Примечание: для других это работало, когда они настраивали ${user.home}/.m2/settings.xml. Если в user.home нет settings.xml, просто скопируйте его из conf / в каталог maven.)

  <!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->

    <proxy>
      <id>my-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <username></username>
      <password></password>
      <host>my.proxy.host.com</host>
      <port>8080</port>
      <nonProxyHosts></nonProxyHosts>
    </proxy>

  </proxies>

Затем укажите pom.xmlзагрузку из центрального репозитория http maven:

<project>
...
    <repositories>
        <repository>
            <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>
        </repository>
    </repositories>
...
</project>

Вам также может потребоваться настроить http-прокси в вашей среде IDE. Для VSCode в settings.json:

{
    ...
    "http.proxy": "http://my/proxy/script/address/my-proxy.pac",
    ...
}

Для Win10: Пуск / Поиск> Настройки сетевого прокси> Адрес сценария. введите описание изображения здесь

Источники:


0

Я столкнулся с этой проблемой в той же ситуации, и я написал подробный ответ на связанный с этим вопрос о переполнении стека, объясняющий, как легче изменить cacerts системы с помощью инструмента с графическим интерфейсом. Я думаю, что это немного лучше, чем использовать одноразовое хранилище ключей для конкретного проекта или изменять настройки для maven (что может вызвать проблемы в будущем).


0

Несмотря на то, что я помещал сертификаты в cacerts, я все равно получал ошибку. Оказывается, я помещал их в jre, а не в jdk / jre.

Имейте в виду, что есть два хранилища ключей !!!


0

У меня возникла проблема: раньше я использовал jdk 1.8.0_31 с установленным сертификатом. Я перешел на jdk 1.8.0_191, но не установил сертификат.

Но мои проекты работали нормально, я понял, что их зависимости уже загружены. Таким образом, они будут компилировать и упаковывать только эти проекты. Но это не сработало для новых проектов maven, поскольку их зависимости не были загружены ранее.

Решение::

  1. Переключитесь на более раннюю версию jdk (для которой уже был установлен сертификат) для вашего нового проекта и выполните чистую установку
  2. Снова загрузите сертификат для новой версии jdk, на которую вы недавно перешли, а затем выполните чистую установку.

0

После создания хранилища ключей, упомянутого @Andy. В Eclipse я добавил аргументы jvm, и это сработало.

введите описание изображения здесь

введите описание изображения здесь


0

У меня была такая же проблема с SSL и maven. ИТ-политика моей компании запрещает мне вносить какие-либо изменения в конфигурацию компьютеров, поэтому я скопировал весь .m2 с другого моего компьютера и вставил его в папку .m2, и это сработало.

Папка .m2 обычно находится в c \ user \ admin


-1

Еще одна причина: если вы откроете Charles, вы также можете столкнуться с этой проблемой, в этом случае просто закройте Charles.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.