IT박스

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

itboxs 2020. 7. 16. 19:47
반응형

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


방금 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 홈 : C : \ Projects \ maven \ bin. Java 버전 : 1.7.0_45, 공급 업체 : Oracle Corporation Java 홈 : C : \ Program Files \ Java \ jdk1.7.0_45 \ jre 기본 로캘 : it_IT, 플랫폼 인코딩 : Cp1252 OS 이름 : "windows 7", 버전 : "6.1", 아치 : "amd64", 제품군 : "windows"[DEBUG] username = *****, password = ***로 ***** : 8080을 통해 https://repo.maven.apache.org/maven2에 0.0 우선 순위의 커넥터 WagonRepositoryConnector 사용 : 다운로드 : https : // repo. maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom[경고] 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.plugin.internal.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver)에서 org.apache.maven.plugins : maven-clean-plugin : jar : 2.5에 대한 아티팩트 설명자를 읽지 못했습니다. java : 122) (org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.java:148)) (org.apache.maven.plugin.DefaultBuildPluginManager)org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:138)의 loadPlugin (DefaultBuildPluginManager.java:81), org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver) org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve (DefaultPluginPrefixResolver.java:85) at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix (MojoDescriptorCreator.java:260) org에서 org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java:103)의 org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor (MojoDescriptorCreator.java:220). .org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:85) org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:347) org의 DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java:83) org.apache.maven.cli.MavenCli.execute (MavenCli.java:582)의 org.apache.maven.cli.MavenCli.doMain (MavenCli.java의 .apache.maven.DefaultMaven.execute (DefaultMaven.java:154) : 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 java.lang.reflect.Method.invoke (Method.java:606)의 org.codehaus.plexus.classworlds.launcher.Launcher의 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)org.codehaus.plexus.classworlds.launcher.Launcher.Launch (Launcher.java:229)의 launchEnhanced (Launcher.java:289) 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-에 대한 아티팩트 설명자를 읽지 못했습니다. clean-plugin : jar : 2.5의 org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:349)의 org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader) : java : 231에서 org.apache.maven.plugin.internal의 org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor (DefaultRepositorySystem.java:288)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 : org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver에서 요청 된 대상에 대한 유효한 인증 경로를 찾을 수 없음) org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:262)의 .java : 459), org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:239) apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:334) ... 26 more 원인 : 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 (에서 요청한 대상에 대한 유효한 인증 경로를 찾을 수 없습니다. org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap (WagonRepositoryConnector.java:1004)의 org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run (WagonRepositoryConnector.java:1016) ) org.eclipse.aether.util.concurrency.RunnableErrorForwarder $ 1.run (RunnableErrorForwarder.java:67) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor $ Worker java.lang.Thread.run (Thread.java:744)의 .run (ThreadPoolExecutor.java:615) 원인 : org.apache.maven.wagon.TransferFailedException : sun.security.validator.ValidatorException : PKIX 경로 작성 실패 : sun.security.provider.certpath.SunCertPathBuilderException : org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData에서 요청 된 대상에 대한 유효한 인증 경로를 찾을 수 없습니다. (AbstractHttpClientWagon.java:935) org.apache.maven.wagon.StreamWagon.getInputStream (StreamWagon.java:116) org.apache.maven.wagon.StreamWagon.getIfNewer (StreamWagon.java:88) org.apache에 있습니다. org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run (WagonRepositoryConnector.java:660)의 maven.wagon.StreamWagon.get (StreamWagon.java:61) ... 4 추가 원인 : javax.net.ssl .SSLHandshakeException : sun.security.validator.ValidatorException : PKIX 경로 작성 실패 : sun.security.provider.certpath.SunCertPathBuilderException :sun.security.ssl에서 sun.security.ssl.Alerts.getSSLException (Alerts.java:192)의 sun.security.ssl.SSLSocketImpl.fatal (SSLSocketImpl.java:1884)에서 요청 된 대상에 대한 유효한 인증 경로를 찾을 수 없습니다. sun.security.ssl의 Handshaker.fatalSE (Handshaker.java:276) : sun.security.ssl의 Handshaker.fatalSE (Handshaker.java:270) sun.security.ssl의 HandHandkerker.ServerCertificate (ClientHandshaker.java:1341) sun.security.ssl.Handshaker.processLoop (Handshaker.java:868)의 sun.security.ssl.Handshaker.process_record (Handshaker.java:804)의 sun.security에있는 .ClientHandshaker.processMessage (ClientHandshaker.java:153) sun.security.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1312)의 sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1339)의 ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:1016) .ssl.SSLSocketImpl.org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket (SSLConnectionSocketFactory.java:280)의 startHandshake (SSLSocketImpl.java:1323) : org.apache.maven.wagon.providers.http. org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade (PoolingHttpClientConnectionManager.java:329)의 org.apache에서 httpclient.impl.conn.HttpClientConnectionOperator.upgrade (HttpClientConnectionOperator.java:167) maorg.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) (org.apache.maven.wagon.providers)에서 확인하십시오.org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute (RedirectExec.java:108)의 http.httpclient.impl.execchain.RetryExec.execute (RetryExec.java:85)는 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) org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.execute (AbstractHttpClientWagon.java:756)의 .java : 82) (org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java:854)) ) ... 8 추가 원인 : sun.security.validator.ValidatorException : PKIX 경로 작성 실패 : sun.security.provider.certpath.SunCertPathBuilderException :sun.security.validator에서 sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:385)에서 요청 된 대상에 대한 유효한 인증 경로를 찾을 수 없습니다. sun.security.validator에서 sun.security.validator.PKIXValidator.engineValidate (PKIXValidator.java:292) sun.security.ssl.X509TrustManagerImpl.validate (X509TrustManagerImpl.java:326)에있는 sun.security.ssl.X509TrustManager의 Validator.validate (Validator.java:260) sun.security.ssl에있는 Validator.validate (Validator.java:260) sun.security.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:1323)의 .X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.java:126) ... 27 more 원인 : sun.security.provider.certpath.SunCertPathBuilderException : 유효한 찾을 수 없음 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 더보기


사실 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>

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

제이.


위의 답변은 효과적인 솔루션이지만 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변수 에 대한 자세한 정보는 여기를 참조 하십시오 .


최신 정보

방금이 버그 보고서를 우연히 발견했습니다.

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는 위의 링크에서 "지문"이라고 함). 추가하는 방법은 다음과 같습니다.

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 명령을 실행할 수 있었고 키 저장소를 지정할 필요가 없습니다.


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


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


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

내가 달릴 때

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 내용을 얻었습니다.

그것은 성공적으로 추가되었음을 의미합니다.


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

에 추가 %JAVA_HOME%\bin하는 데 도움이 된 것은 (Windows를 실행 중입니다). 그리고 %JAVA_HOME%메이븐은 JDK를 필요로하기 때문에 다만 JRE 위치 JDK가 위치,이다.
나는 그것이 왜 도움이되었는지 확실하지 않지만 그랬습니다. 나는 이것이 내가 바꾼 유일한 것이라고 확신합니다.


HTTPS 리포지토리 ( https://repo.spring.io/milestone) 에서이 문제가 발생 하면 보안되지 않은 http://repo.spring.io/milestone 으로 바꾸어보십시오 . 그리고 그게 다야


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

빠른 해결책은 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>

절대로 인증 검색을 피하십시오.


I ran into this problem in the same situation, and I wrote up a detailed answer to a related question on stack overflow explaining how to more easily modify the system's cacerts using a GUI tool. I think it's a little bit better than using a one-off keystore for a specific project or modifying the settings for maven (which may cause trouble down the road).


Even though I was putting the certificates in cacerts, I was still getting the error. Turns our I was putting them in jre, not in jdk/jre.

There are two keystores, keep that in mind!!!


The issue, I got is Earlier, I was using jdk 1.8.0_31 with certificate installed. I switched to jdk 1.8.0_191 but did not install certificate.

But, my projects were working fine, I realized that their dependencies were downloaded already. So, they would only compile and package those projects. But, this did not work for new maven projects as their dependencies were not downloaded earlier.

Solution::

  1. Switch to earlier jdk version(which had certificate already installed) for your new project and do clean install
  2. Download certificate again for the new jdk version that you have recently switched to and then do clean install

What worked for me:

Configure <proxy> settings in ${MAVEN_HOME}/conf/settings.xml:

(Note: For others, it worked when they configured ${user.home}/.m2/settings.xml. If there is no settings.xml in user.home, just copy it from conf/ in the maven directory.)

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

Then point pom.xml to download from 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>

You may also need to configure http proxy in your IDE. For VSCode in settings.json:

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

For Win10: Start/Search > Network proxy settings > Script address enter image description here

Sources:

참고URL : https://stackoverflow.com/questions/25911623/problems-using-maven-and-ssl-behind-proxy

반응형