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

Проблемы с использованием 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 через файл 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: C:\Projects\maven\bin..     Версия Java: 1.7.0_45, поставщик: Oracle Corporation     Java home: C:\Program Files\Java\jdk1.7.0_45\jre     Язык по умолчанию: it_IT, кодировка платформы: Cp1252     Название ОС: "windows 7", версия: "6.1", arch: "amd64", family: "windows"     [DEBUG] Использование разъема WagonRepositoryConnector с приоритетом 0.0 для https://repo.maven.apache.org/maven2 через *****: 8080 с имя пользователя = *****, пароль = ***     Скачивание: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom[WARNING] Не удалось получить дескриптор плагина для org.apache.maven.plugins: maven-clean-plugin: 2.5: Плагин org.apache.maven.plugins: maven-clean-plugin: 2.5 или один из его не удалось разрешить: не удалось прочитать дескриптор артефакта для org.apache.maven.plugins: maven-clean-plugin: jar: 2.5     org.apache.maven.plugin.PluginResolutionException: плагин org.apache.maven.plugins: maven-clean-plugin: 2.5 или один из его не удалось разрешить: не удалось прочитать дескриптор артефакта для 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)             на org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)             на org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)             на 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)             на 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)             на org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)             на org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)             на org.apache.maven.cli.MavenCli.main(MavenCli.java:158)             at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)             at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)             at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)             в java.lang.reflect.Method.invoke(Method.java:606)             на org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)             на org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)             на org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)             на org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)     Вызвано: org.eclipse.aether.resolution.ArtifactDescriptorException: не удалось читать дескриптор артефакта для org.apache.maven.plugins: Maven-плагин очистки: банка: 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     Причина: org.eclipse.aether.resolution.ArtifactResolutionException: не удалось передать артефакт org.apache.maven.plugins: maven-clean-plugin: pom: 2.5 от/до центрального (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели             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     Вызвано: org.eclipse.aether.transfer.ArtifactTransferException: не удалось передать артефакт org.apache.maven.plugins: maven-clean-plugin: pom: 2.5 от/до центрального (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели             на org.eclipse.aether.connector.wagon.WagonRepositoryConnector $6.wrap(WagonRepositoryConnector.java:1016)             на org.eclipse.aether.connector.wagon.WagonRepositoryConnector $6.wrap(WagonRepositoryConnector.java:1004)             на org.eclipse.aether.connector.wagon.WagonRepositoryConnector $GetTask.run(WagonRepositoryConnector.java:725)             at org.eclipse.aether.util.concurrency.RunnableErrorForwarder $1.run(RunnableErrorForwarder.java:67)             в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)             в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:615)             в java.lang.Thread.run(Thread.java:744)     Вызвано: org.apache.maven.wagon.TransferFailedException: sun.security.validator.ValidatorException: не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели             at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:935)             at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)             на org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)             на org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)             на org.eclipse.aether.connector.wagon.WagonRepositoryConnector $GetTask.run(WagonRepositoryConnector.java:660)             ... еще 4     Вызвано: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: не удалось создать путь к PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели             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)             на org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:280)             на org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator.java:167)             на org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)             на 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)             на 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)             на org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:108)             на org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)             на 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)             на org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)             ... еще 8     Причина: sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели             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     Вызывается: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели             at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)             в java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)             at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)             ... 33 подробнее

4b9b3361

Ответ 1

Дело в том, что ваш плагин 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

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

Ответ 3

Update

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

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

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

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

sudo/var/lib/dpkg/info/ca-certificates-java.postinst configure

Если вы проверите содержимое хранилища ключей (как и в моем первоначальном ответе), вы увидите больше целой группы, включая необходимый 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 repo (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 /И т.д. /SSL/Certs/Java/cacerts

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

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

mykey, 2 декабря 2015 г., trustedCertEntry, отпечаток сертификата (SHA1): A8: 98: 5D: 3A: 65: Е5: Е5: С4: В2: Д7: D6: 6D: 40: С6: DD: 2F: В1: 9C: 54: 36

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

Ответ 4

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

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

Синтаксис:

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

Пример:

keytool -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk 1.8.0_144.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -importcert -alias nexus -file ~/Downloads/abc.com-ssl.crt

Ответ 5

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

Ответ 6

У меня была такая же проблема.

когда я запускаю

mvn clean package

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

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

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

прежде всего запустите:

keytool -list -keystore "Java path +" /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/public/certificate_file_downloaded.cer -keystore/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/security/cacerts

напишите свой пароль sudo, затем он спросит вас о ключевом пароле

по умолчанию используется changeit

затем скажите y, что вы доверяете этому сертификату.

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

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

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

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

Ответ 7

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

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

Ответ 9

Шаг 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

Ответ 10

Быстрое решение - добавить этот код в ваш 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>

Где никогда не бывает, чтобы избежать поиска сертифицированных.

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

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

Решение::

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

Ответ 14

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

Сконфигурируйте настройки <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: Пуск/Поиск> Настройки сетевого прокси> Адрес скрипта enter image description here

Источники: