Sự cố khi sử dụng Maven và SSL phía sau proxy


133

Tôi vừa tải xuống Maven và đang cố chạy lệnh đơn giản được tìm thấy trên trang "Maven trong năm phút" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Đây là lệnh:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Khi tôi chạy nó, tôi gặp lỗi với chứng chỉ SSL và không thể tải xuống từ kho lưu trữ Maven trung tâm tại https://repo.maven.apache.org/maven2 . Lỗi là "SunCertPathBuilderException: không thể tìm thấy đường dẫn chứng nhận hợp lệ cho mục tiêu được yêu cầu".

Tôi đang ngồi sau một tường lửa của công ty và đã cấu hình chính xác các cài đặt proxy cho cả hai httphttpstruy cập thông qua settings.xmltệp. Tôi nghi ngờ rằng tất cả những người tải xuống Maven và chạy nó lần đầu tiên phải nhập chứng chỉ SSL của kho lưu trữ Maven, vì vậy vấn đề phải nằm ở proxy. Có ai có bất cứ kinh nghiệm với điều này?

Đây là dấu vết ngăn xếp trong chế độ gỡ lỗi đầy đủ (-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
Tôi đã giải quyết nó theo câu trả lời của rec để bỏ qua việc kiểm tra chứng chỉ SSL.
Evin1_

Câu trả lời:


182

Thực tế là plugin maven của bạn cố gắng kết nối với kho lưu trữ từ xa https
(ví dụ: https://repo.maven.apache.org/maven2/ )

Đây là kết nối SSL mới cho Maven Central đã được cung cấp vào tháng 8 năm 2014!

Vì vậy, xin vui lòng, bạn có thể xác minh rằng tệp cài đặt của bạn có cấu hình chính xác không.

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

Bạn có thể sử dụng kho lưu trữ http maven đơn giản như thế này

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

Xin vui lòng cho tôi biết nếu giải pháp của tôi hoạt động;)

J.


2
Cảm ơn phản hồi nhanh chóng và chính xác, nó đã giúp ích cho tôi và có thể sẽ giúp được rất nhiều người bắt đầu sử dụng maven sau tháng 8 năm 2014 :-) Trong khi đó, tôi đã tìm ra cách để nó hoạt động với SSL. Tôi sẽ đăng nó dưới dạng câu trả lời dưới đây để giúp đỡ người khác, nhưng câu trả lời của bạn sẽ là câu trả lời chính thức. Cảm ơn
Andy

Cảm ơn bạn Andy;) Cả hai giải pháp làm việc cho bạn? hay chỉ là sự thay thế?
học.info

4
Đúng, tôi đã thử nó và nó hoạt động. Tuy nhiên, trong khối mã đầu tiên tôi phải thay đổi cả URL kho lưu trữ từ https thành http, nếu không tôi đã nhận được thông báo lỗi như trước. Ngoài ra, đối với bất kỳ ai đang thử điều này, đừng quên thẻ <activeProfiles>.
Andy

1
Chỉ cần thử với soln đơn giản thứ hai, nó đã làm việc cho tôi ... Cảm ơn.
Kim cương xanh

7
Có hiệu lực từ ngày 15 tháng 1 năm 2020, Kho lưu trữ trung tâm không còn hỗ trợ giao tiếp không an toàn qua HTTP đơn giản và yêu cầu tất cả các yêu cầu đến kho lưu trữ được mã hóa qua HTTPS.
Ahmad Alkhatib

183

Câu trả lời ở trên là một giải pháp hoạt động tốt, nhưng đây là cách thực hiện nếu bạn muốn sử dụng repo SSL:

  • Sử dụng trình duyệt (tôi đã sử dụng IE) để truy cập https://repo.maven.apache.org/
    • Nhấp vào biểu tượng khóa và chọn "Xem chứng chỉ"
    • Chuyển đến tab "Chi tiết" và chọn "Lưu vào tệp"
    • Chọn loại "Base 64 X.509 (.CER)" và lưu nó ở đâu đó
  • Bây giờ hãy mở một dấu nhắc lệnh và gõ (sử dụng đường dẫn của riêng bạn):

    keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore

  • Bây giờ bạn có thể chạy lại lệnh với tham số

    -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

  • Trong linux sử dụng đường dẫn tuyệt đối

    -Djavax.net.ssl.trustStore=/tmp/mavenKeystore

    nếu không thì điều này sẽ xảy ra

  • Như thế này:

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

Không bắt buộc:

Bạn có thể sử dụng MAVEN_OPTSbiến môi trường để bạn không phải lo lắng về nó nữa. Xem thêm thông tin về MAVEN_OPTSbiến ở đây :


15
Điều này nên được chấp nhận là câu trả lời chính xác. Proxy proxy của bạn đang chèn một chứng chỉ trung gian không được JDK tin cậy.
Gordon

2
Tôi có maven làm việc thông qua dòng lệnh. Làm thế nào để tôi làm cho nó làm việc nhật thực?
Mitchodh Mhalgi

Dễ dàng cắt giảm ' Djavax.net.ssl.keyStoreType = pkcs12 -Djavax.net.ssl.keyStorePassword = XXXXXX
Al Lelopath

Điều này đã giải quyết vấn đề của tôi. Khi nó hỏi mật khẩu lưu trữ khóa, mặc định là "thay đổi" nếu bạn chưa thay đổi mật khẩu. :)
John Manko

3
Ngoài ra, trên Ubuntu, bạn có thể chạy lệnh nhưsudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
John Manko

23

Cập nhật

Tôi chỉ vấp phải báo cáo lỗi này:

https://bugs.launchpad.net/ubfox/+source/ca-certert-java/+orms/1396760

Nó dường như là nguyên nhân của các vấn đề của chúng tôi ở đây. Một cái gì đó với ca-cert-java gặp phải lỗi và không được điền đầy đủ các đoạn trích. Đối với tôi, điều này bắt đầu xảy ra sau khi tôi nâng cấp lên 15.10 và lỗi này có thể xảy ra trong quá trình đó.

Cách giải quyết là thực hiện lệnh sau:

sudo /var/lib/dpkg/info/ca-certert-java.postinst configure

Nếu bạn kiểm tra nội dung của kho khóa (như trong câu trả lời ban đầu của tôi), giờ đây bạn sẽ thấy toàn bộ nhiều hơn, bao gồm cả DigiCert Global Root CA.

Nếu bạn đã trải qua quá trình trong câu trả lời ban đầu của tôi, bạn có thể dọn sạch khóa chúng tôi đã thêm bằng cách chạy lệnh này (giả sử bạn không chỉ định một bí danh khác):

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

Maven bây giờ sẽ hoạt động tốt.


Câu trả lời gốc

Tôi chỉ muốn mở rộng câu trả lời của Andy về việc thêm chứng chỉ và chỉ định kho khóa. Điều đó đã cho tôi bắt đầu, và kết hợp với thông tin ở nơi khác tôi có thể hiểu được vấn đề và tìm giải pháp khác (tốt hơn?).

Câu trả lời của Andy chỉ định một kho khóa mới với chứng chỉ Maven cụ thể. Ở đây, tôi sẽ mở rộng hơn một chút và thêm chứng chỉ gốc vào kho tin cậy java mặc định. Điều này cho phép tôi sử dụng mvn (và các công cụ java khác) mà không chỉ định kho lưu trữ khóa.

Để tham khảo HĐH của tôi là Ubuntu 15.10 với Maven 3.3.3.

Về cơ bản, java Truststore mặc định trong thiết lập này không tin tưởng chứng chỉ gốc của repo Maven (DigiCert Global Root CA), vì vậy nó cần phải được thêm vào.

Tôi tìm thấy nó ở đây và tải về:

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

Sau đó, tôi tìm thấy vị trí cửa hàng tin cậy mặc định, nằm ở đây:

/ etc / ssl / certs / java / cacerts

Bạn có thể thấy những gì certs hiện đang có trong đó bằng cách chạy lệnh này:

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

Khi được nhắc, mật khẩu lưu trữ khóa mặc định là "thay đổi" (nhưng không ai từng làm như vậy).

Trong thiết lập của tôi, dấu vân tay của "DigiCert Global Root CA" đã không tồn tại (DigiCert gọi đó là "vân tay" trong liên kết ở trên). Vì vậy, đây là cách để thêm nó:

sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore / etc / ssl / certs / java / cacerts

Điều này sẽ nhắc nếu bạn tin tưởng chứng chỉ, hãy nói có.

Sử dụng keytool -list một lần nữa để xác minh rằng khóa tồn tại. Tôi không buồn chỉ định một bí danh (-alias), vì vậy nó đã kết thúc như thế này:

mykey, ngày 2 tháng 12 năm 2015, đáng tin cậy : 54: 36

Sau đó tôi đã có thể chạy các lệnh mvn như bình thường, không cần chỉ định kho khóa.


Cảm ơn Andy. Và đến Leeland, người đã đăng lại blog của mình. gật gù.com / blog / leb / 2006/12 / và bạn cũng vậy, @Luke.
ajoshi


11

Bạn có thể nhập chứng chỉ SSL theo cách thủ công và chỉ cần thêm nó vào kho khóa.

Đối với người dùng linux,

Cú pháp:

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

Thí dụ :

keytool -trustcacerts -keystore / Thư viện crt


Lúc đầu, bạn vẫn phải lưu chứng chỉ như được mô tả trong câu trả lời của Andy . Vì vậy, phần mở rộng sẽ là ".cer".
sjngm

9

Đây có thể không phải là giải pháp tốt nhất. Tôi đã thay đổi maven của mình từ 3.3.x thành 3.2.x. Và vấn đề này đã biến mất.


Tôi đã thử cài đặt certs trong một vài giờ mà không có may mắn, và giải pháp này cuối cùng đã có hiệu quả! Phiên bản mới nhất của maven mà tôi phải làm việc là 3.2.2.
jlars62 16/07/2015

3.3.3 và 3.2.5 không hoạt động với tôi, nhưng 3.0.5 đã hoạt động
ROMANIA_engineer

Tôi đã kết thúc ở đây từ một công cụ tìm kiếm, nhưng tôi đang sử dụng Gradle thay vì Maven. Cập nhật phiên bản Gradle cũ hơn của tôi cũng khắc phục các sự cố SSL kỳ lạ này cho tôi.
Nik Reiman

6

Tôi thực sự đã có cùng một vấn đề.

khi tôi chạy

gói mvn sạch

trong dự án maven của tôi, tôi nhận được lỗi chứng chỉ này bằng công cụ maven.

Tôi đã theo dõi Câu trả lời của @Andy cho đến khi tôi tải xuống tệp .cer

Sau đó, phần còn lại của câu trả lời không hiệu quả với tôi nhưng tôi đã làm như sau (Tôi đang chạy trên máy Linux Debian)

trước hết, chạy:

keytool -list -keystore "Đường dẫn Java +" / jre / lib / security / cacerts ""

ví dụ trong trường hợp của tôi, đó là:

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

Nếu nó hỏi về mật khẩu, chỉ cần nhấn enter.

lệnh này được cho là liệt kê tất cả các chứng chỉ ssl được java chấp nhận. Khi tôi chạy lệnh này, trong trường hợp của tôi, tôi đã nhận được 93 chứng chỉ chẳng hạn.

Bây giờ thêm tập tin tải về cer cho cacerts tập tin bằng cách chạy lệnh sau:

sudo keytool -importcert -file /home/hal/Public/cert ve_file_doaded.cer -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / security /

viết mật khẩu sudo của bạn sau đó nó sẽ hỏi bạn về mật khẩu kho khóa

một trong những mặc định là changeit

sau đó nói y rằng bạn tin tưởng chứng chỉ này.

nếu bạn chạy lệnh

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

một lần nữa, trong trường hợp của tôi, tôi đã nhận được 94 nội dung của tập tin cacerts

nó có nghĩa là, nó đã được thêm vào thành công


2

Một giải pháp nhanh chóng là thêm mã này vào tệp pom.xml của bạn:

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

Trường hợp không bao giờ là để tránh tìm kiếm một chứng nhận.


1
Đó là giá trị để cuộn xuống trong chủ đề câu trả lời. Điều này làm việc đơn giản!
bạc

1

Tôi đã nhận được cùng một lỗi về chứng chỉ SSL khi Maven cố gắng tự động tải xuống các mô-đun cần thiết.
Để khắc phục, tôi đã cố gắng thực hiện câu trả lời của Luke ở trên, nhưng thấy rằng chứng chỉ DigiCert Global Root CA đã có trong kho khóa đáng tin cậy của Java.

Điều đã giúp tôi là thêm %JAVA_HOME%\binvào biến Path (Tôi đang chạy Windows). Và %JAVA_HOME%là một vị trí JDK, không chỉ là một vị trí JRE, vì Maven cần một JDK.
Tôi không chắc chắn tại sao nó giúp, nhưng nó đã làm. Tôi hoàn toàn chắc chắn rằng đây là điều duy nhất tôi thay đổi.



1

Bước 1: NHẬN nội dung của Chứng chỉ trang web (bạn muốn nhập nó dưới dạng root đáng tin cậy)

$ 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.

Bước 2: Lưu toàn bộ nội dung (bao gồm các dòng CHỨNG NHẬN BEGIN và CHỨNG NHẬN KẾT THÚC, có ý nghĩa trong trường hợp này) dưới dạng godaddyg2.pem và nhập nó vào cửa hàng ủy thác của tôi thông qua:

Bước 3: Nhập chứng chỉ trong kho khóa (kho lưu trữ khóa tin cậy java)

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

1

Điều gì làm việc cho tôi:

Định cấu hình <proxy>cài đặt trong ${MAVEN_HOME}/conf/settings.xml:

(Lưu ý: Đối với những người khác, nó hoạt động khi họ định cấu hình ${user.home}/.m2/settings.xml. Nếu không có tệp settings.xml trong user.home, chỉ cần sao chép nó từ conf / trong thư mục 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>

Sau đó điểm pom.xmlđể tải xuống từ http maven trung tâm 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>

Bạn cũng có thể cần phải định cấu hình proxy http trong IDE của mình. Đối với VSCode trong settings.json:

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

Đối với Win10: Bắt đầu / Tìm kiếm> Cài đặt proxy mạng> Địa chỉ tập lệnh nhập mô tả hình ảnh ở đây

Nguồn:


0

Tôi gặp vấn đề này trong tình huống tương tự và tôi đã viết ra một câu trả lời chi tiết cho một câu hỏi liên quan về lỗi tràn ngăn xếp giải thích cách dễ dàng sửa đổi các trích dẫn của hệ thống bằng công cụ GUI. Tôi nghĩ rằng sẽ tốt hơn một chút so với việc sử dụng kho khóa một lần cho một dự án cụ thể hoặc sửa đổi cài đặt cho maven (điều này có thể gây rắc rối trên đường).


0

Mặc dù tôi đã đặt các chứng chỉ trong phần trích dẫn, tôi vẫn nhận được lỗi. Lần lượt chúng tôi đã đưa chúng vào jre, không phải trong jdk / jre.

Có hai kho khóa, hãy ghi nhớ điều đó !!!


0

Vấn đề, tôi đã nhận được trước đó, tôi đã sử dụng jdk 1.8.0_31 với chứng chỉ được cài đặt. Tôi đã chuyển sang jdk 1.8.0_191 nhưng không cài đặt chứng chỉ.

Nhưng, các dự án của tôi đã hoạt động tốt, tôi nhận ra rằng các phụ thuộc của chúng đã được tải xuống. Vì vậy, họ sẽ chỉ biên dịch và đóng gói các dự án đó. Nhưng, điều này không làm việc cho các dự án maven mới vì sự phụ thuộc của chúng không được tải xuống trước đó.

Giải pháp::

  1. Chuyển sang phiên bản jdk trước đó (đã có chứng chỉ đã được cài đặt) cho dự án mới của bạn và cài đặt sạch
  2. Tải lại chứng chỉ cho phiên bản jdk mới mà bạn đã chuyển sang gần đây và sau đó tiến hành cài đặt sạch

0

Sau khi tạo kho khóa được đề cập bởi @Andy. Trong Eclipse, tôi đã thêm jvm args và nó đã hoạt động.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


0

Tôi gặp vấn đề tương tự với SSL và maven. Chính sách công ty CNTT của tôi hạn chế tôi thực hiện bất kỳ thay đổi nào đối với cấu hình máy tính, vì vậy tôi đã sao chép toàn bộ .m2 từ máy tính khác của mình và dán thư mục .m2 và nó đã hoạt động.

thư mục .m2 thường được tìm thấy trong c \ user \ admin


-1

Một nguyên nhân khác: Nếu bạn mở Charles, bạn cũng có thể gặp vấn đề này, trong trường hợp này chỉ cần bỏ Charles.


-1

Tôi chỉ đơn giản là sử dụng phiên bản java mới và nó đã làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.