프록시 뒤의 Maven 및 SSL 사용 문제


133

방금 Maven을 다운로드했고 "Maven in 5 Minutes"페이지 ( 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 인증서에 오류가 발생하고 https://repo.maven.apache.org/maven2 의 중앙 Maven 저장소에서 다운로드 할 수 없습니다 . 오류는 "SunCertPathBuilderException : 요청한 대상에 대한 유효한 인증 경로를 찾을 수 없습니다"입니다.

회사 방화벽 뒤에 앉아 있고 파일을 통한 액세스 http및 프록시 설정을 올바르게 구성했습니다 . Maven을 다운로드하여 처음으로 실행하는 모든 사람이 Maven 저장소의 SSL 인증서를 가져와야하므로 프록시에 문제가 있어야합니다. 누구든지 이것에 대한 경험이 있습니까?httpssettings.xml

전체 디버그 모드 (-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
SSL 인증서 검사를 무시하기 위해 rec의 답변 에 따라 해결했습니다 .
Evin1_

답변:


182

사실 maven 플러그인은 https 원격 저장소에 연결하려고합니다
(예 : https://repo.maven.apache.org/maven2/ )

이것은 Maven Central이 2014 년 8 월에 출시 된 새로운 SSL 연결입니다!

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>

내 솔루션이 작동하는지 알려주세요.)

제이.


2
빠르고 정확한 답변에 감사드립니다. 저에게 도움이되었으며 2014 년 8 월 이후에 maven을 사용하기 시작한 많은 사람들을 도울 것입니다. 다른 사람들을 돕기 위해 아래에 답변으로 게시하지만 귀하의 답변은 공식적으로 인정되는 답변입니다. 감사합니다
Andy

감사합니다 Andy;) 두 솔루션이 모두 효과가 있습니까? 아니면 그냥 대안?
biology.info

4
그래, 나는 그것을 시도하고 작동한다. 그러나 첫 번째 코드 블록에서 두 저장소 URL을 https에서 http로 변경해야했습니다. 그렇지 않으면 이전과 동일한 오류 메시지가 나타납니다. 또한 이것을 시도하는 사람에게는 <activeProfiles> 태그를 잊지 마십시오.
Andy

1
두 번째 대안 인 간단한 용액으로 시험해 보았습니다.
블루 다이아몬드

7
2020 년 1 월 15 일부터 Central Repository는 더 이상 일반 HTTP를 통한 안전하지 않은 통신을 지원하지 않으며 리포지토리에 대한 모든 요청은 HTTPS를 통해 암호화되어야합니다.
Ahmad Alkhatib

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

  • 리눅스에서 절대 경로 사용

    -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 2016 년

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
Al Lelopath

이것은 내 문제를 해결했습니다. 키 저장소 비밀번호를 요청할 때 아직 비밀번호를 변경하지 않은 경우 기본값은 "changeit"입니다. :)
John Manko

3
또한 우분투에서는 다음과 같은 명령을 실행할 수 있습니다.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-certificates-java에 오류가 발생하여 cacert가 완전히 채워지지 않은 문제가 있습니다. 나에게 이것은 15.10으로 업그레이드 한 후에 시작 되었으며이 버그는 아마도 그 과정에서 발생했을 것입니다.

해결 방법은 다음 명령을 실행하는 것입니다.

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

키 스토어의 내용을 확인하면 (원래 답변과 같이) 필요한 DigiCert Global Root CA를 포함하여 더 많은 것을 볼 수 있습니다.

원래 답변으로 프로세스를 진행 한 경우이 명령을 실행하여 추가 한 키를 정리할 수 있습니다 (다른 별칭을 지정하지 않은 경우).

sudo keytool-삭제-별칭 mykey -keystore / etc / ssl / certs / java / cacerts

메이븐은 이제 잘 작동합니다.


원래 답변

인증서 추가 및 키 저장소 지정에 대한 Andy의 답변을 확장하고 싶습니다. 그것은 나를 시작했고, 다른 곳의 정보와 결합하여 문제를 이해하고 다른 (더 나은) 해결책을 찾을 수있었습니다.

Andy의 답변은 Maven 인증서를 사용하여 새 키 저장소를 지정합니다. 여기서는 좀 더 광범위하게 루트 인증서를 기본 Java 신뢰 저장소에 추가합니다. 이를 통해 키 저장소를 지정하지 않고 mvn (및 기타 Java 항목)을 사용할 수 있습니다.

참고로 내 OS는 Maven 3.3.3의 Ubuntu 15.10입니다.

기본적으로이 설정의 기본 Java 신뢰 저장소는 Maven 저장소 (DigiCert Global Root CA)의 루트 인증서를 신뢰하지 않으므로 추가해야합니다.

나는 그것을 여기에서 발견하고 다운로드했다.

https://www.digicert.com/digicert-root-certificates.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 / etc / ssl / certs / java / cacerts

인증서를 신뢰하면 프롬프트가 표시됩니다 (예).

keytool -list를 다시 사용하여 키가 있는지 확인하십시오. 별명 (-alias)을 지정하지 않았으므로 다음과 같이 끝났습니다.

mykey, 2015 년 12 월 2 일, trustedCertEntry, 인증서 지문 (SHA1) : A8 : 98 : 5D : 3A : 65 : E5 : E5 : C4 : B2 : D7 : D6 : 6D : 40 : C6 : DD : 2F : B1 : 9C : 54 : 36

그런 다음 평소처럼 mvn 명령을 실행할 수 있었고 키 저장소를 지정할 필요가 없습니다.


앤디에게 감사합니다. 그리고 블로그를 다시 게시 한 Leeland에게. nodsw.com/blog/leeland/2006/12/… 그리고 여러분도, @Luke.
ajoshi

13

당신은 -Dmaven.wagon.http.ssl.insecure=true옵션을 사용할 수 있습니다


11

SSL 인증서를 수동으로 가져 와서 키 저장소에 추가 할 수 있습니다.

리눅스 사용자의 경우

통사론:

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

예 :

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


처음에는 Andy의 답변에 설명 된대로 인증서를 저장해야합니다 . 따라서 확장자는 ".cer"입니다.
sjngm

9

이것이 최선의 해결책이 아닐 수도 있습니다. maven을 3.3.x에서 3.2.x로 변경했습니다. 그리고이 문제는 사라졌습니다.


나는 운이없이 몇 시간 동안 인증서를 설치하려고 시도 했으며이 솔루션은 마침내 작동했습니다! 내가 일하게 된 최신 버전의 maven은 3.2.2입니다.
jlars62

3.3.3과 3.2.5는 저에게는 효과가 없었지만 3.0.5는 효과가
있었습니다

검색 엔진에서 종료되었지만 Maven 대신 Gradle을 사용하고 있습니다. 이전 버전의 Gradle을 업데이트하면 이상한 SSL 문제가 해결되었습니다.
Nik Reiman

6

나는 실제로 같은 문제가 있었다.

내가 달릴 때

mvn 클린 패키지

내 maven 프로젝트에서 maven 도구에 의해이 인증서 오류가 발생합니다.

.cer 파일을 다운로드 할 때까지 @Andy의 답변을 따랐습니다.

그 후 나머지 답변은 저에게 효과가 없었지만 다음을 수행했습니다 (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 키를 누르십시오.

이 명령은 Java에서 승인 한 모든 SSL 인증서를 나열해야합니다. 이 명령을 실행할 때 예를 들어 93 개의 인증서가 있습니다.

이제 다음 명령을 실행 하여 다운로드 한 파일 .cercacerts 파일에 추가하십시오 .

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입니다

그런 다음 이 인증서를 신뢰 한다고 y 라고 말합니다 .

명령을 실행하면

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

다시 한번, 내 경우에는 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

Maven이 필요한 모듈을 자동으로 다운로드하려고 할 때 SSL 인증서에 대해 동일한 오류가 발생했습니다.
해결책으로, 위의 Luke의 답변을 구현하려고 시도했지만 DigiCert Global Root CA 인증서가 이미 Java의 신뢰할 수있는 키 저장소에 있음을 발견했습니다. 내가 Path 변수

에 추가 %JAVA_HOME%\bin하는 데 도움이 된 것은 (Windows를 실행 중입니다). 그리고 %JAVA_HOME%메이븐은 JDK를 필요로하기 때문에 다만 JRE 위치 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은 구성 할 때 작동했습니다 . user.home에 settings.xml이 없으면 maven 디렉토리의 conf /에서 복사하십시오.)

  <!-- 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.xmlhttp 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>

IDE에서 http 프록시를 구성해야 할 수도 있습니다. VSCode의 경우 settings.json:

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

Win10의 경우 : 시작 / 검색> 네트워크 프록시 설정> 스크립트 주소 여기에 이미지 설명을 입력하십시오

출처 :


0

나는 같은 상황 에서이 문제에 부딪 쳤고 GUI 도구를 사용하여 시스템의 cacert를보다 쉽게 ​​수정하는 방법을 설명하는 스택 오버플로에 관한 관련 질문에 대한 자세한 답변 을 작성했습니다 . 특정 프로젝트에 일회용 키 저장소를 사용하거나 maven 설정을 수정하는 것보다 약간 낫다고 생각합니다 (도로에서 문제가 발생할 수 있음).


0

인증서를 cacerts에 넣었지만 여전히 오류가 발생했습니다. jdk / jre가 아닌 jre에 넣었습니다.

두 개의 키 스토어가 있습니다. 명심하십시오 !!!


0

문제는 이전에 인증서가 설치된 jdk 1.8.0_31을 사용하고 있다는 것입니다. jdk 1.8.0_191로 전환했지만 인증서를 설치하지 않았습니다.

그러나 내 프로젝트는 정상적으로 작동했지만 종속성이 이미 다운로드되었음을 알았습니다. 그래서 그들은 단지 그 프로젝트들을 컴파일하고 패키징 할 것입니다. 그러나 종속성이 이전에 다운로드되지 않았기 때문에 새로운 maven 프로젝트에서는 작동하지 않았습니다.

해결책::

  1. 새 프로젝트의 이전 jdk 버전 (인증서가 이미 설치되어 있음)으로 전환하고 새로 설치
  2. 최근에 전환 한 새 jdk 버전에 대한 인증서를 다시 다운로드 한 다음 새로 설치

0

@Andy가 언급 한 키 저장소를 작성한 후 Eclipse에서 jvm args를 추가했으며 작동했습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


0

SSL과 maven에 동일한 문제가있었습니다. 회사의 IT 정책에 따라 컴퓨터 구성을 변경할 수 없으므로 다른 컴퓨터에서 전체 .m2를 복사하여 .m2 폴더에 붙여 넣었습니다.

.m2 폴더는 일반적으로 c \ user \ admin에 있습니다.


-1

또 다른 원인 : Charles를 열면이 문제를 만날 수 있습니다.이 경우 Charles를 종료하십시오.


-1

나는 단순히 새로운 자바 버전을 사용했고 그것은 나를 위해 일했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.