ปัญหาในการใช้ Maven และ SSL หลังพร็อกซี


134

ฉันเพิ่งดาวน์โหลด Maven และพยายามเรียกใช้คำสั่งง่ายๆที่พบในหน้า "Maven in Five 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 และไม่สามารถดาวน์โหลดได้จากส่วนกลางที่เก็บ 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!

ดังนั้นโปรดตรวจสอบว่า 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
ขอบคุณสำหรับการตอบกลับที่รวดเร็วและแม่นยำมันใช้ได้ผลสำหรับฉันและอาจจะช่วยคนจำนวนมากที่เริ่มใช้ maven หลังจากเดือนสิงหาคม 2014 :-) ในระหว่างนี้ฉันก็คิดหาวิธีทำให้มันทำงานกับ SSL ได้ ฉันจะโพสต์ไว้เป็นคำตอบด้านล่างเพื่อช่วยเหลือผู้อื่น แต่คำตอบของคุณจะเป็นคำตอบที่ยอมรับอย่างเป็นทางการ ขอบคุณ
Andy

ขอบคุณ Andy;) ทั้งสองวิธีนี้เหมาะกับคุณหรือไม่? หรือแค่ทางเลือก?
ชีววิทยาข้อมูล

4
ใช่ฉันลองแล้วและได้ผล อย่างไรก็ตามในบล็อกโค้ดแรกฉันต้องเปลี่ยน URL ที่เก็บทั้งสองจาก https เป็น http มิฉะนั้นฉันจะได้รับข้อความแสดงข้อผิดพลาดเหมือนเดิม นอกจากนี้สำหรับทุกคนที่พยายามทำสิ่งนี้อย่าลืมแท็ก <activeProfiles>
Andy

1
เพิ่งลองใช้ Soln ทางเลือกอื่นที่สองมันได้ผลสำหรับฉัน ... ขอบคุณ
Blue Diamond

7
ตั้งแต่วันที่ 15 มกราคม 2020 Central Repository ไม่รองรับการสื่อสารที่ไม่ปลอดภัยผ่าน HTTP ธรรมดาอีกต่อไปและกำหนดให้คำขอทั้งหมดไปยังที่เก็บนั้นเข้ารหัสผ่าน HTTPS
Ahmad Alkhatib

183

คำตอบด้านบนเป็นวิธีแก้ปัญหาที่ดี แต่หากคุณต้องการใช้ 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ตัวแปรที่นี่ :


15
สิ่งนี้ควรได้รับการยอมรับว่าเป็นคำตอบที่ถูกต้อง พร็อกซี ISA ของคุณกำลังแทรกใบรับรองระดับกลางที่ JDK ไม่เชื่อถือ
Gordon

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 / directory / mycertificate.p12 - Djavax.net.ssl.keyStoreType = pkcs12 -Djavax.net.ssl.keyStorePassword = XXXXXX
Al Lelopath

สิ่งนี้ช่วยแก้ปัญหาของฉันได้ เมื่อระบบถามรหัสผ่านที่เก็บคีย์ค่าเริ่มต้นคือ "changeit" หากคุณยังไม่ได้เปลี่ยน :)
John Manko

3
นอกจากนี้บน Ubuntu คุณอาจเรียกใช้คำสั่งเช่น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-certificate-java พบข้อผิดพลาดและไม่ได้เติมข้อมูล cacerts อย่างสมบูรณ์ สำหรับฉันสิ่งนี้เริ่มเกิดขึ้นหลังจากที่ฉันอัปเกรดเป็น 15.10 และข้อผิดพลาดนี้อาจเกิดขึ้นในระหว่างกระบวนการนั้น

วิธีแก้ปัญหาคือดำเนินการคำสั่งต่อไปนี้:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst กำหนดค่า

หากคุณตรวจสอบเนื้อหาของที่เก็บคีย์ (ตามคำตอบเดิมของฉัน) ตอนนี้คุณจะเห็นอีกมากมายรวมถึง DigiCert Global Root CA ที่จำเป็น

หากคุณทำตามขั้นตอนในคำตอบเดิมของฉันคุณสามารถล้างคีย์ที่เราเพิ่มโดยเรียกใช้คำสั่งนี้ (สมมติว่าคุณไม่ได้ระบุนามแฝงอื่น):

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

ตอนนี้ Maven จะทำงานได้ดี


คำตอบเดิม

ฉันแค่อยากจะขยายคำตอบของ Andy เกี่ยวกับการเพิ่มใบรับรองและการระบุที่เก็บคีย์ นั่นทำให้ฉันเริ่มต้นและรวมกับข้อมูลที่อื่นฉันสามารถเข้าใจปัญหาและหาวิธีแก้ปัญหาอื่น (ดีกว่า?)

คำตอบของ Andy ระบุที่เก็บคีย์ใหม่ที่มีใบรับรอง Maven โดยเฉพาะ ที่นี่ฉันจะกว้างขึ้นเล็กน้อยและเพิ่มใบรับรองหลักไปยัง java truststore เริ่มต้น สิ่งนี้ทำให้ฉันใช้ mvn (และสิ่งอื่น ๆ ของ java) โดยไม่ต้องระบุที่เก็บคีย์

สำหรับการอ้างอิงระบบปฏิบัติการของฉันคือ Ubuntu 15.10 พร้อม Maven 3.3.3

โดยทั่วไป java truststore เริ่มต้นในการตั้งค่านี้ไม่เชื่อถือใบรับรองหลักของ Maven repo (DigiCert Global Root CA) ดังนั้นจึงจำเป็นต้องเพิ่ม

ฉันพบที่นี่และดาวน์โหลด:

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

จากนั้นฉันพบตำแหน่งที่ตั้งเริ่มต้นของ truststore ซึ่งอยู่ที่นี่:

/ etc / SSL / ใบรับรอง / java / cacerts

คุณสามารถดูใบรับรองที่มีอยู่ในปัจจุบันได้โดยเรียกใช้คำสั่งนี้:

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

เมื่อได้รับแจ้งรหัสผ่านที่เก็บคีย์เริ่มต้นคือ "changeit" (แต่ไม่มีใครเคยทำ)

ในการตั้งค่าของฉันไม่มีลายนิ้วมือของ "DigiCert Global Root CA" (DigiCert เรียกมันว่า "thumbprint" ในลิงก์ด้านบน) ต่อไปนี้เป็นวิธีเพิ่ม:

sudo keytool - นำเข้า - ไฟล์ DigiCertGlobalRootCA.crt -keystore / etc / ssl / certs / java / cacerts

สิ่งนี้ควรแจ้งหากคุณเชื่อถือใบรับรองให้ตอบว่าใช่

ใช้ keytool -list อีกครั้งเพื่อตรวจสอบว่ามีคีย์อยู่ ฉันไม่สนใจที่จะระบุนามแฝง (-alias) ดังนั้นมันจึงลงเอยเช่นนี้:

mykey, 2 ธันวาคม 2015, trustCertEntry, ลายนิ้วมือใบรับรอง (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/… และถึงคุณ @ ลุค
ajoshi


11

คุณสามารถนำเข้าใบรับรอง SSL ด้วยตนเองและเพิ่มลงในที่เก็บคีย์

สำหรับผู้ใช้ linux

ไวยากรณ์:

keytool -trustcacerts -keystore / jre / lib / security / cacerts -storepass changeit -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 แปลก ๆ เหล่านี้ให้ฉันด้วย
Nik Reiman

6

ฉันมีปัญหาเดียวกันจริงๆ

เมื่อฉันวิ่ง

mvn แพ็คเกจที่สะอาด

ในโครงการ maven ของฉันฉันได้รับข้อผิดพลาดใบรับรองนี้จากเครื่องมือ maven

ฉันติดตามคำตอบของ @Andy จนถึงจุดที่ฉันดาวน์โหลดไฟล์. cer

หลังจากนั้นคำตอบที่เหลือไม่ได้ผลสำหรับฉัน แต่ฉันทำสิ่งต่อไปนี้ (ฉันใช้งานบนเครื่อง Linux Debian)

ก่อนอื่นให้เรียกใช้:

keytool -list -keystore "เส้นทาง Java +" / jre / lib / security / cacerts ""

ตัวอย่างเช่นในกรณีของฉันคือ:

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

หากถามเกี่ยวกับรหัสผ่านให้กด Enter

คำสั่งนี้ควรจะแสดงรายการใบรับรอง ssl ทั้งหมดที่จาวายอมรับ เมื่อฉันรันคำสั่งนี้ในกรณีของฉันฉันได้รับใบรับรอง 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 เนื้อหาของไฟล์cacerts

หมายความว่าเพิ่มสำเร็จแล้ว


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 พยายามดาวน์โหลดโมดูลที่จำเป็นโดยอัตโนมัติ
เพื่อเป็นการแก้ไขฉันพยายามใช้คำตอบของ Luke ข้างต้น แต่พบว่าใบรับรอง DigiCert Global Root CA อยู่ในที่เก็บคีย์ที่เชื่อถือได้ของ Java แล้ว

สิ่งที่ช่วยฉันได้คือการเพิ่ม%JAVA_HOME%\binตัวแปร Path (ฉันใช้ Windows) และ%JAVA_HOME%เป็นที่ตั้ง JDK ไม่ใช่แค่ที่ตั้ง JRE เนื่องจาก Maven ต้องการ JDK
ฉันไม่แน่ใจว่าทำไมมันถึงช่วยได้ แต่มันก็ทำได้ ฉันมั่นใจอย่างยิ่งว่านี่เป็นสิ่งเดียวที่ฉันเปลี่ยนไป


1

หากปัญหานี้เกิดขึ้นสำหรับHTTPSพื้นที่เก็บข้อมูล fe https://repo.spring.io/milestoneคุณสามารถเพียงแค่พยายามที่จะเปลี่ยนที่ไม่ใช่การรักษาความปลอดภัย: http://repo.spring.io/milestone และนั่นแหล่ะ


1
แต่ละ https repo ไม่มี http url
webyildirim

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 และนำเข้าไว้ใน Trust Store ของฉันผ่าน:

ขั้นตอนที่ 3:นำเข้าใบรับรองในที่เก็บคีย์ (ที่เก็บคีย์ที่เชื่อถือได้ของ Java)

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

1

อะไรที่เหมาะกับฉัน:

การกำหนดค่า<proxy>การตั้งค่าใน${MAVEN_HOME}/conf/settings.xml:

(หมายเหตุ: สำหรับคนอื่นจะใช้งานได้เมื่อกำหนดค่า${user.home}/.m2/settings.xmlไว้หากไม่มี settings.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

ฉันพบปัญหานี้ในสถานการณ์เดียวกันและฉันได้เขียนคำตอบโดยละเอียดสำหรับคำถามที่เกี่ยวข้องใน stack overflow เพื่ออธิบายวิธีแก้ไข cacerts ของระบบได้ง่ายขึ้นโดยใช้เครื่องมือ GUI ฉันคิดว่ามันดีกว่าการใช้ที่เก็บคีย์แบบครั้งเดียวสำหรับโครงการเฉพาะหรือแก้ไขการตั้งค่าสำหรับ maven (ซึ่งอาจทำให้เกิดปัญหาในระหว่างเดินทาง)


0

แม้ว่าฉันจะใส่ใบรับรองใน cacerts แต่ฉันก็ยังได้รับข้อผิดพลาด เปลี่ยนเป็นของเราที่ฉันใส่ไว้ใน jre ไม่ใช่ใน jdk / jre

มีสองคีย์สโตร์โปรดจำไว้ว่า !!!


0

ปัญหาที่ฉันได้รับคือก่อนหน้านี้ฉันใช้ jdk 1.8.0_31 พร้อมใบรับรองที่ติดตั้ง ฉันเปลี่ยนเป็น jdk 1.8.0_191 แต่ไม่ได้ติดตั้งใบรับรอง

แต่โครงการของฉันทำงานได้ดีฉันตระหนักว่าการอ้างอิงของพวกเขาได้ดาวน์โหลดแล้ว ดังนั้นพวกเขาจะรวบรวมและจัดแพ็คเกจโครงการเหล่านั้นเท่านั้น แต่สิ่งนี้ใช้ไม่ได้กับโครงการ maven ใหม่เนื่องจากไม่ได้ดาวน์โหลดการอ้างอิงมาก่อนหน้านี้

สารละลาย::

  1. เปลี่ยนเป็น jdk เวอร์ชันก่อนหน้า (ซึ่งติดตั้งใบรับรองแล้ว) สำหรับโปรเจ็กต์ใหม่ของคุณและทำการติดตั้งใหม่ทั้งหมด
  2. ดาวน์โหลดใบรับรองอีกครั้งสำหรับ jdk เวอร์ชันใหม่ที่คุณเพิ่งเปลี่ยนไปจากนั้นทำการติดตั้งใหม่ทั้งหมด

0

หลังจากสร้างที่เก็บคีย์ที่กล่าวถึงโดย @Andy ใน Eclipse ฉันเพิ่ม args jvm และใช้งานได้

ป้อนคำอธิบายภาพที่นี่

ป้อนคำอธิบายภาพที่นี่


0

ฉันมีปัญหาเดียวกันกับ SSL และ maven นโยบายด้านไอทีของ บริษัท ของฉัน จำกัด ให้ฉันทำการเปลี่ยนแปลงใด ๆ กับการกำหนดค่าคอมพิวเตอร์ดังนั้นฉันจึงคัดลอก. m2 ทั้งหมดจากคอมพิวเตอร์เครื่องอื่นของฉันและวางโฟลเดอร์. m2 และมันก็ใช้งานได้

โดยปกติโฟลเดอร์. m2 จะอยู่ใน c \ user \ admin


-1

อีกสาเหตุหนึ่ง: หากคุณเปิด Charles คุณอาจพบปัญหานี้เช่นกันในกรณีนี้ให้ออกจาก Charles


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.