Проблеми з використанням Maven та SSL позаду проксі


133

Щойно я завантажив 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 року!

Тож, будь ласка, чи можете ви переконатися, що налаштування.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>

Будь ласка, дайте мені знати, чи працює моє рішення;)

Дж.


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 працює через командний рядок. Як змусити його працювати в затемненні?
Prabodh Mhalgi

Проста cut'n'paste для MAVEN_OPTS: -Xmx512m -Djavax.net.ssl.trustStore = trust.jks -Djavax.net.ssl.trustStorePassword = -Djavax.net.ssl.keyStore = / home / каталог / 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
Джон Манко

23

Оновлення

Я щойно натрапив на цей звіт про помилку:

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

Це, мабуть, є причиною наших проблем тут. Щось із ca-сертифікатами-java, які зустрічаються з помилкою та не повністю заповненими кекерами. Для мене це почалося, коли я оновив до 15.10, і ця помилка, ймовірно, сталася під час цього процесу.

Вирішення завдання полягає у виконанні наступної команди:

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

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

Якщо ви пройшли процес у моїй оригінальній відповіді, ви можете очистити ключ, який ми додали, запустивши цю команду (якщо ви не вказали інший псевдонім):

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

Зараз Мейвен буде добре працювати.


Оригінальний відповідь

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

Відповідь Енді конкретизує нову сховище ключів конкретно з сертом Мейвена. Тут я пройду трохи ширше і додаю кореневий сертифікат до версії java truststore. Це дозволяє мені використовувати mvn (та інші речі Java), не вказуючи магазин брелоків.

Для довідки моя ОС - Ubuntu 15.10 з Maven 3.3.3.

В основному, довірений магазин Java в цій установці не довіряє кореневому сертифікату репорта Maven (DigiCert Global Root CA), тому його потрібно додати.

Я знайшов його тут і завантажив:

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

Потім я знайшов розташування довірених магазинів за замовчуванням, яке знаходиться тут:

/ etc / ssl / certs / java / cacerts

Ви можете побачити, які церти зараз є там, виконавши цю команду:

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

Коли буде запропоновано, пароль за замовчуванням зберігання ключів є "changeit" (але ніхто ніколи цього не робить).

У моїй установці відбитків пальців "DigiCert Global Root CA" не існувало (DigiCert називає його "thumbprint" у посиланні вище). Ось ось як його додати:

sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore / тощо / ssl / certs / java / cacerts

Це повинно підказати, якщо ви довіряєте cert, скажіть так.

Скористайтеся списком keytool ще раз, щоб перевірити наявність ключа. Я не намагався вказати псевдонім (-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/… І вам теж @Luke.
айоші


11

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

Для користувачів Linux,

Синтаксис:

keytool -trustcacerts -keystore / jre / lib / безпека / cacerts -затримка зміниit -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. crt


Спочатку вам залишається зберегти сертифікат, як описано у відповіді Енді . Отже, розширення буде ".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 / безпека / 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, тоді він запитає про пароль магазину

типовим є changeit

то скажіть у, що ви довіряєте цьому сертифікату.

якщо запустити команду

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

ще раз, у моєму випадку, я отримав 94 вміст файлу кесерів

це означає, що він був доданий успішно.


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 trusted key store)

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

1

Що для мене спрацювало:

Налаштування <proxy>параметрів у ${MAVEN_HOME}/conf/settings.xml:

(Примітка. Для інших він працював під час їх налаштування ${user.home}/.m2/settings.xml. Якщо немає налаштування.xml у user.home, просто скопіюйте його з 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 central repo:

<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

Я зіткнувся з цією проблемою в тій же ситуації, і я написав детальну відповідь на відповідне запитання про переповнення стека, пояснюючи, як легше змінити касети системи за допомогою інструменту GUI. Я думаю, що це трохи краще, ніж використовувати одноразовий сховище ключів для конкретного проекту або змінити параметри для maven (що може спричинити проблеми на дорозі).


0

Навіть не дивлячись на те, що я клав сертифікати в кошики, я все-таки отримував помилку. Виявляється, я ставив їх у jre, а не в jdk / jre.

Є два магазини брелоків, майте це на увазі !!!


0

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

Але, мої проекти працювали чудово, я зрозумів, що їх залежності вже завантажені. Отже, вони лише збирали б і пакували ці проекти. Але це не спрацювало з новими новими проектами, оскільки їх залежності не були завантажені раніше.

Рішення ::

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

0

Після створення магазину ключів, згаданого @Andy. У Eclipse я додав аргументи jvm, і це спрацювало.

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

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


0

У мене були ті ж проблеми із SSL та Maven. ІТ-політика моїх компаній обмежує мене вносити будь-які зміни в конфігурацію комп’ютерів, тому я скопіював весь .m2 з іншого комп’ютера і вставив його в папку .m2, і вона спрацювала.

.m2 папка зазвичай знаходиться під c \ user \ admin


-1

Ще одна причина: Якщо ви відкриєте Чарльза, ви також могли б зіткнутися з цією проблемою, у цьому випадку просто киньте Чарльза.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.