programing

프록시 뒤에서 Maven 및 SSL 사용 문제

prostudy 2022. 5. 24. 21:54
반응형

프록시 뒤에서 Maven 및 SSL 사용 문제

나는 방금 메이븐을 다운받았고 "메이븐 인 파이브 미닛" 페이지(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의 중앙 메이븐 리포지토리에서 다운로드할 수 없다.오류: "SunCertPathBuilder"예외: 요청한 대상에 대한 유효한 인증 경로를 찾을 수 없음"

회사 방화벽 뒤에 앉아 있고 두 가지 모두에 대한 프록시 설정을 올바르게 구성했음http그리고https을 통해 접근하다.settings.xml파일. 메이븐을 다운받아 처음 실행하는 모든 사람이 메이븐 저장소의 SSL 인증서를 가져와야 하는 것은 아닌지 의심스럽기 때문에 문제는 반드시 프록시에 있을 것이다.이 일에 경험이 있는 사람?

전체 디버그 모드(-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

위의 답변은 좋은 작업 솔루션이지만 SSL repo를 사용하려면 다음 절차를 따르십시오.

  • 브라우저(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여기서 변수:

maven 플러그인이 https 원격 리포지토리에 연결하려고 시도한다는 사실
(예: https://repo.maven.apache.org/maven2/)

2014년 8월에 Maven Central을 위한 새로운 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>

내 해결책이 효과가 있으면 나에게 알려줘;)

j

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

갱신하다

나는 방금 이 버그리포트를 우연히 발견했다.

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

그것이 우리 문제의 원인인 것 같다.ca-certificate-java가 오류가 발생하고 cacerts가 완전히 채워지지 않는 경우.나는 15.10으로 업그레이드한 후에 이런 일이 일어나기 시작했는데 아마 그 과정에서 이 버그가 발생했을 것이다.

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

sudo /var/lib/dpkg/postinst 구성

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

원래 답변에서 프로세스를 거쳤다면 이 명령을 실행하여 추가한 키를 정리하십시오(다른 별칭을 지정하지 않은 것으로 가정).

sudo keytool -delete -delete mykey store /etc/setc/certs/certs/certs

메이븐은 이제 잘 될 것이다.


오리지널

나는 단지 인증서를 추가하고 키스토어를 지정하는 것에 대한 앤디의 대답을 확장하고 싶다.그것은 나를 시작하게 했고, 다른 곳의 정보와 결합하여 나는 문제를 이해하고 다른 (더 나은?) 해결책을 찾을 수 있었다.

앤디의 대답은 메이븐 인증서를 가진 새로운 키스토어를 구체적으로 명시하고 있다.여기서는 좀 더 넓게 살펴보고 기본 자바 신뢰 저장소에 루트 인증서를 추가하려고 한다.이것은 키 저장소를 지정하지 않고 mvn (및 다른 자바 물건)을 사용할 수 있게 해준다.

참고로 내 OS는 Maven 3.3.3이 있는 Ubuntu 15.10이다.

기본적으로 이 설정의 기본 자바 신뢰 저장소는 Maven repo(DigiCert Global Root CA)의 루트 인증서를 신뢰하지 않으므로 추가가 필요하다.

여기서 찾아서 다운받았어:

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

그리고 여기에 있는 기본 신뢰 저장소 위치를 찾았어.

/etc/cset/certs/certs/certs

다음 명령을 실행하여 현재 어떤 인증서가 있는지 확인하십시오.

keytool -list -keystore /etc/filences/certs/certs/certs

메시지가 표시되면 기본 키 저장소 암호는 "changit"(변경)이지만 아무도 변경하지 않는다.

내 설정에서는 "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

그런 다음 keystore를 지정할 필요 없이 mvn 명령을 정상적으로 실행할 수 있었다.

SSL 인증서를 수동으로 가져와서 키 저장소에 추가하면 된다.

리눅스 사용자의 경우,

구문:

keytool -trustcacerts -keystore /jre/lib/security/security/securitys -storepass changeit -importcert -inportcert -message nexus -file

예:

keytool -trustcacerts -keystore /Library/JavaVirtualMachines/jdk1.8.0_144.jdk/콘텐츠/홈/jre/lib/security/cacerts -storepass changeit -importcert -nexus -files -/abc.com-ssl.crt.crt

사실 나도 같은 문제가 있었어.

내가 달리면

mvn 클린 패키지

내 manven 프로젝트에서 manven 도구에 의해 이 인증서 오류가 발생했어.

.cer 파일을 다운로드하는 지점까지 @Andy의 답안을 따라갔다.

그 후 나머지 답변은 나에게 효과가 없었지만 나는 다음과 같이 했다.

먼저 실행:

keytool -list -keystore "Java path+"/jre/lib/security/cacerts""

예를 들어 나의 경우 다음과 같다.

keytool -list -list -keystore /usr/lib/jvm/jdk-8-flas-arm32-vfp-hflt/jre/lib/security/security/s.

암호를 묻는 메시지가 나타나면 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-hfp-flt/jre/security/certs

sudo 암호를 쓰면 keystore 암호에 대해 물어볼 것이다.

기본은 체인지.

그런 다음 이 인증서를 신뢰한다고 말하십시오.

명령을 실행하면

keytool -list -list -keystore /usr/lib/jvm/jdk-8-flas-arm32-vfp-hflt/jre/lib/security/security/s.

다시 한번, 나의 경우, 나는 94개의 카카오 파일 내용을 받았다.

성공적으로 추가되었다는 뜻이다.

이것이 최선의 해결책은 아닐지도 모른다.나는 내 면도기를 3.3.x에서 3.2.x로 바꿨어. 그리고 이 문제는 없어졌어.

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

이 문제는 maven 플러그인이 HTTPS 원격 저장소(https://repo.maven.apache.org/maven2) 또는 (https://repo1.maven.apache.org)에 연결을 시도하기 때문에 발생한다.

얼마 전에는 HTTP 대신 HTTPS를 사용하도록 URL을 변경할 수 있었지만 2020년 1월 15일부터는 HTTPS URL만 사용할 뿐 더 이상 작동하지 않는다.

이 문제를 쉽게 해결할 수 있는 방법으로 settings.xml 파일에서 안전하지 않은 Maven URL을 사용할 수 있다.따라서 상기 참조문헌을 모두 http://insecure.repo1.maven.org/maven2/으로 변경하십시오.

팁: JAVA_HOME 변수는 항상 JRE 경로가 아닌 JDK 경로를 가리켜야 한다(예: "C:\Program Files\Java\jdk1.7.0_80".

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

탐색을 피할 수 없는 곳은 공인된 곳이다.

메이븐이 필요한 모듈을 자동으로 다운로드하려고 했을 때 SSL 인증서에 대한 동일한 오류를 받고 있었다.
해결책으로 위에서 루크의 대답을 실행하려고 시도하고 있었지만, DigiCert Global Root CA 인증서가 이미 자바에서 신뢰하는 키스토어에 있다는 것을 알게 되었다.

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

HTTPS 리포지토리(예: https://repo.spring.io/milestone)에서 이 문제가 발생하면 보안되지 않은 http://repo.spring.io/milestone으로 대체해 보십시오.그리고 이것이 마지막입니다.

나에게 효과가 있었던 것:

설정하다<proxy>의 설정${MAVEN_HOME}/conf/settings.xml:

(참고: 다른 사람의 경우, 구성 시 작동함${user.home}/.m2/settings.xml 사용자에 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 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 : 시작/검색 > 네트워크 프록시 설정 > 스크립트 주소

출처:

@Nandy에서 언급한 키스토어를 만든 후.Eclipse에서 jvm args를 추가했는데 효과가 있었다.

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

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

ymptom: SSL maven 빌드를 지원하도록 Nexus를 구성한 후peer not authenticated또는PKIX path building failed.

이는 대개 넥서스에서 자체 서명된 SSL 인증서를 사용함으로써 발생한다.Java는 이러한 인증서를 유효한 인증서로 간주하지 않으며, 기본적으로 이를 실행하는 서버에 연결하는 것을 허용하지 않을 것이다.

이 문제를 해결할 수 있는 몇 가지 방법이 있다.

  1. Maven을 실행하는 Java의 신뢰 저장소에 Nexus 서버의 공용 인증서 추가
  2. Verisign과 같은 루트 인증 기관에서 서명한 Nexus에서 인증서 가져오기
  3. 메이븐에게 인증서가 서명되지 않았는데도 수락하도록 지시

옵션 1의 경우 다음을 사용할 수 있는keytool아래 글의 단계를 명령하고 따르십시오.

Java 기반 클라이언트에서 자체 서명 또는 개인 인증서 명시적으로 신뢰

옵션 3의 경우 Mavened를 호출하십시오.-Dmaven.wagon.http.ssl.insecure=true. 인증서에 구성된 호스트 이름이 Nexus가 실행 중인 호스트 이름과 일치하지 않을 경우 추가해야 할 수도 있음-Dmaven.wagon.http.ssl.allowall=true

참고: 이러한 추가 파라미터는 정적 이니셜라이저에서 초기화되므로 를 통해 전달되어야 한다.MAVEN_OPTS 것은 가 없을 그들을 지휘라인에서 메이븐에게 넘겨주는 것은 효과가 없을 것이다.

자세한 내용은 여기를 참조하십시오.

나는 같은 상황에서 이 문제에 부딪혔고, GUI 도구를 사용하여 시스템의 캐서트를 보다 쉽게 수정하는 방법을 설명하는 스택 오버플로 관련 질문에 대한 자세한 답변을 작성했다.특정 프로젝트에 일회용 키스토어를 사용하거나 (도로 아래쪽에 문제가 생길 수 있는) 메이븐의 설정을 수정하는 것보다 조금 더 낫다고 생각한다.

자격증을 카카오에 넣고 있었는데도 여전히 오류가 나고 있었다.우리가 그들을 jdk/jre가 아닌 jre에 넣고 있었다.

두 개의 키스토어가 있으니 명심해!!!

내가 받은 문제는 Early, 나는 인증서가 설치된 jdk 1.8.0_31을 사용하고 있었다.jdk 1.8.0_191로 전환했지만 인증서를 설치하지 않았다.

하지만, 내 프로젝트는 잘 되어가고 있었고, 나는 그들의 의존성이 이미 다운로드 되었다는 것을 깨달았다.그래서 그들은 단지 그 프로젝트들을 편집하고 패키지로 만들었을 뿐이다.그러나, 이것은 새로운 면봉 프로젝트들의 의존성이 더 일찍 다운로드되지 않았기 때문에 효과가 없었다.

해결책:

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

또 다른 원인:만약 당신이 찰스를 열면, 당신도 이 문제를 만날 수 있을 겁니다. 이 경우에는 그냥 찰스를 그만두십시오.

나는 SSL과 manev에도 같은 문제가 있었다.회사 IT 정책에 따라 컴퓨터 구성을 변경할 수 없어 다른 컴퓨터에서 .m2 전체를 복사하여 .m2 폴더를 붙여넣었는데 효과가 있었다.

.m2 폴더는 일반적으로 c\user\admin 아래에 있음

앤디가 꺼낸 것 보다 조금 더.

체인을 찾을 경우를 대비해서 최상위(루트) 인증서를 가져가야 한다.

알아내는데 하루 걸렸어

나는 단지 새로운 자바 버전을 사용했고 그것은 나에게 효과가 있었다.

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

반응형