프록시 뒤에서 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개의 인증서를 받았다.
이제 다음 명령을 실행하여 다운로드한 파일 .cer를 cacerts 파일에 추가하십시오.
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 : 시작/검색 > 네트워크 프록시 설정 > 스크립트 주소
출처:
- maven 프록시 설정이 작동하지 않음
- https://www.mkyong.com/maven/how-to-enable-proxy-setting-in-maven/
- https://maven.apache.org/guides/mini/guide-proxies.html
- https://maven.apache.org/settings.html#Proxies
- https://maven.apache.org/guides/introduction/introduction-to-repositories.html
@Nandy에서 언급한 키스토어를 만든 후.Eclipse에서 jvm args를 추가했는데 효과가 있었다.
ymptom: SSL maven 빌드를 지원하도록 Nexus를 구성한 후peer not authenticated
또는PKIX path building failed
.
이는 대개 넥서스에서 자체 서명된 SSL 인증서를 사용함으로써 발생한다.Java는 이러한 인증서를 유효한 인증서로 간주하지 않으며, 기본적으로 이를 실행하는 서버에 연결하는 것을 허용하지 않을 것이다.
이 문제를 해결할 수 있는 몇 가지 방법이 있다.
- Maven을 실행하는 Java의 신뢰 저장소에 Nexus 서버의 공용 인증서 추가
- Verisign과 같은 루트 인증 기관에서 서명한 Nexus에서 인증서 가져오기
- 메이븐에게 인증서가 서명되지 않았는데도 수락하도록 지시
옵션 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로 전환했지만 인증서를 설치하지 않았다.
하지만, 내 프로젝트는 잘 되어가고 있었고, 나는 그들의 의존성이 이미 다운로드 되었다는 것을 깨달았다.그래서 그들은 단지 그 프로젝트들을 편집하고 패키지로 만들었을 뿐이다.그러나, 이것은 새로운 면봉 프로젝트들의 의존성이 더 일찍 다운로드되지 않았기 때문에 효과가 없었다.
해결책:
- 새 프로젝트의 이전 jdk 버전(인증서가 이미 설치되어 있음)으로 전환하고 새로 설치하십시오.
- 최근에 전환한 새 jdk 버전에 대한 인증서를 다시 다운로드한 다음 새로 설치
또 다른 원인:만약 당신이 찰스를 열면, 당신도 이 문제를 만날 수 있을 겁니다. 이 경우에는 그냥 찰스를 그만두십시오.
나는 SSL과 manev에도 같은 문제가 있었다.회사 IT 정책에 따라 컴퓨터 구성을 변경할 수 없어 다른 컴퓨터에서 .m2 전체를 복사하여 .m2 폴더를 붙여넣었는데 효과가 있었다.
.m2 폴더는 일반적으로 c\user\admin 아래에 있음
앤디가 꺼낸 것 보다 조금 더.
체인을 찾을 경우를 대비해서 최상위(루트) 인증서를 가져가야 한다.
알아내는데 하루 걸렸어
나는 단지 새로운 자바 버전을 사용했고 그것은 나에게 효과가 있었다.
참조URL: https://stackoverflow.com/questions/25911623/problems-using-maven-and-ssl-behind-proxy
'programing' 카테고리의 다른 글
Vue의 스토어에서 Getter from Store from Vue return is isLoggedIn(상태 (0) | 2022.05.24 |
---|---|
제로 사이즈 말로크 (0) | 2022.05.24 |
Vue.js/Vuex 로그인: [vuex] 알 수 없는 작업 유형: postLogin. (0) | 2022.05.24 |
TypeError: 원형 구조를 JSON Vuejs로 변환 (0) | 2022.05.24 |
간단한 문자열 반복 방법 (0) | 2022.05.24 |