Masalah menggunakan Maven dan SSL di belakang proksi

133

Saya baru saja mengunduh Maven dan mencoba menjalankan perintah sederhana yang ditemukan di halaman "Maven dalam Lima Menit" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Ini perintahnya:

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

Ketika saya menjalankannya saya mendapatkan kesalahan dengan sertifikat SSL dan tidak dapat mengunduh dari repositori pusat Maven di https://repo.maven.apache.org/maven2 . Kesalahannya adalah "SunCertPathBuilderException: tidak dapat menemukan jalur sertifikasi yang valid ke target yang diminta".

Saya duduk di belakang firewall perusahaan dan telah mengkonfigurasi dengan benar pengaturan proxy untuk keduanya httpdan httpsakses melalui settings.xmlfile. Saya ragu bahwa setiap orang yang mengunduh Maven dan menjalankannya untuk pertama kali harus mengimpor sertifikat SSL dari repositori Maven, jadi masalahnya harus ada pada proksi. Adakah yang punya pengalaman dengan ini?

Berikut jejak tumpukan dalam mode debug penuh (-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
Andy
sumber
2
Saya menyelesaikannya setelah jawaban rec untuk mengabaikan pengecekan sertifikat SSL.
Evin1_

Jawaban:

182

Faktanya adalah plugin maven Anda mencoba untuk terhubung ke repositori jarak jauh https
(mis. Https://repo.maven.apache.org/maven2/ )

Ini adalah konektivitas SSL baru untuk Maven Central telah tersedia pada Agustus, 2014!

Jadi tolong, dapatkah Anda memverifikasi bahwa settings.xml Anda memiliki konfigurasi yang benar.

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

Anda juga dapat menggunakan repositori http maven sederhana seperti ini

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

Tolong beri tahu saya jika solusi saya berhasil;)

J.

biology.info
sumber
2
Terima kasih atas respons yang cepat dan akurat, itu berhasil untuk saya dan mungkin akan membantu banyak orang yang mulai menggunakan pakar setelah Agustus 2014 :-) Sementara itu saya menemukan cara untuk membuatnya bekerja dengan SSL. Saya akan mempostingnya sebagai jawaban di bawah ini untuk membantu orang lain, tetapi jawaban Anda akan menjadi yang diterima secara resmi. Terima kasih
Andy
Terima kasih, Andy;) Kedua solusi bekerja untuk Anda? atau hanya alternatifnya?
biology.info
4
Yap, saya mencobanya dan berhasil. Namun, di blok kode pertama saya harus mengubah kedua URL repositori dari https ke http, jika tidak, saya mendapat pesan kesalahan yang sama seperti sebelumnya. Juga, bagi siapa pun yang mencoba ini, jangan lupa tag <activeProfiles>.
Andy
1
Baru saja mencoba dengan alternatif sederhana kedua soln, itu berhasil untuk saya ... Terima kasih.
Blue Diamond
7
Efektif 15 Januari 2020, Central Repository tidak lagi mendukung komunikasi tidak aman melalui HTTP biasa dan mengharuskan semua permintaan ke repositori dienkripsi melalui HTTPS.
Ahmad Alkhatib
183

Jawaban di atas adalah solusi kerja yang bagus, tetapi inilah cara melakukannya jika Anda ingin menggunakan repo SSL:

  • Gunakan browser (saya menggunakan IE) untuk membuka https://repo.maven.apache.org/
    • Klik ikon kunci dan pilih "Lihat Sertifikat"
    • Buka tab "Detail" dan pilih "Simpan ke File"
    • Pilih jenis "Basis 64 X.509 (.CER)" dan simpan di suatu tempat
  • Sekarang buka prompt perintah dan ketik (gunakan jalur Anda sendiri):

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

  • Sekarang Anda dapat menjalankan perintah lagi dengan parameter

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

  • Di bawah linux gunakan path absolut

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

    kalau tidak ini akan terjadi

  • Seperti ini:

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

Pilihan:

Anda dapat menggunakan MAVEN_OPTSvariabel lingkungan sehingga Anda tidak perlu khawatir lagi. Lihat info lebih lanjut tentang MAVEN_OPTSvariabel di sini :

Andy
sumber
15
Ini harus diterima sebagai jawaban yang benar. Proxy ISA Anda memasukkan sertifikat perantara yang tidak dipercaya oleh JDK.
Gordon
2
Saya mendapat pakar bekerja melalui baris perintah. Bagaimana cara membuatnya bekerja di gerhana?
Prabodh Mhalgi
Cut'n'paste mudah untuk MAVEN_OPTS: -Xmx512m -Djavax.net.ssl.trustStore = trust.jks -Djavax.net.ssl.trustStorePassword = -Djavax.net.ssl.keyStore = / home / direktori / mycertificate.p12 - Djavax.net.ssl.keyStoreType = pkcs12 -Djavax.net.ssl.keyStorePassword = XXXXXX
Al Lelopath
Ini menyelesaikan masalah saya. Ketika meminta kata sandi keystore, standarnya adalah "ubah" jika Anda belum mengubahnya. :)
John Manko
3
Juga, di Ubuntu, Anda dapat menjalankan perintah sepertisudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
John Manko
23

Memperbarui

Saya baru saja menemukan laporan bug ini:

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

Tampaknya menjadi penyebab masalah kita di sini. Sesuatu dengan ca-sertifikat-java mengalami kesalahan dan tidak mengisi cacerts sepenuhnya. Bagi saya, ini mulai terjadi setelah saya memutakhirkan ke 15.10 dan bug ini mungkin terjadi selama proses itu.

Solusinya adalah dengan menjalankan perintah berikut:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst konfigurasikan

Jika Anda memeriksa konten keystore (seperti dalam jawaban asli saya), sekarang Anda akan melihat lebih banyak lagi, termasuk DigiCert Global Root CA.

Jika Anda menjalani proses dalam jawaban asli saya, Anda dapat membersihkan kunci yang kami tambahkan dengan menjalankan perintah ini (dengan asumsi Anda tidak menentukan alias lain):

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

Maven sekarang akan berfungsi dengan baik.


Jawaban Asli

Saya hanya ingin memperluas jawaban Andy tentang menambahkan sertifikat dan menentukan keystore. Itu membuat saya mulai, dan dikombinasikan dengan informasi di tempat lain saya dapat memahami masalah dan menemukan solusi (lebih baik) yang lain.

Jawaban Andy menentukan keystore baru dengan sertifikat Maven secara khusus. Di sini, saya akan sedikit lebih luas dan menambahkan sertifikat root ke truststore java default. Ini memungkinkan saya untuk menggunakan mvn (dan hal-hal java lainnya) tanpa menentukan keystore.

Untuk referensi OS saya adalah Ubuntu 15.10 dengan Maven 3.3.3.

Pada dasarnya, java truststore default dalam pengaturan ini tidak mempercayai sertifikat root dari repo Maven (DigiCert Global Root CA), sehingga perlu ditambahkan.

Saya menemukannya di sini dan mengunduh:

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

Lalu saya menemukan lokasi truststore default, yang berada di sini:

/ etc / ssl / certs / java / cacerts

Anda dapat melihat sertifikat apa yang saat ini ada di sana dengan menjalankan perintah ini:

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

Ketika diminta, kata sandi keystore default adalah "changeit" (tetapi tidak ada yang pernah melakukannya).

Dalam pengaturan saya, sidik jari "DigiCert Global Root CA" tidak ada (DigiCert menyebutnya "cap jempol" pada tautan di atas). Jadi, inilah cara menambahkannya:

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

Ini akan muncul jika Anda mempercayai sertifikat, katakan ya.

Gunakan keytool -daftar lagi untuk memverifikasi bahwa kuncinya ada. Saya tidak repot-repot menentukan alias (-alias), jadi berakhir seperti ini:

mykey, 2 Des 2015, trustCertEntry, Sertifikat sidik jari (SHA1): A8: 98: 5D: 3A: 65: E5: E5: C4: B2: D7: D6: 6D: 40: C6: DD: 2F: B1: 9C : 54: 36

Kemudian saya dapat menjalankan perintah mvn seperti biasa, tidak perlu menentukan keystore.

Luke
sumber
Terima kasih untuk Andy. Dan untuk Leeland yang mem-posting ulang blognya. nodsw.com/blog/leeland/2006/12/... Dan untuk Anda juga, @Luke.
ajoshi
13

Anda dapat menggunakan -Dmaven.wagon.http.ssl.insecure=trueopsi ini

pelaku diet
sumber
11

Anda dapat mengimpor sertifikat SSL secara manual dan menambahkannya ke keystore.

Untuk pengguna linux,

Sintaksis:

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

Contoh:

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-sl. crt

Balaji Boggaram Ramanarayan
sumber
Pada awalnya Anda masih harus menyimpan sertifikat seperti yang dijelaskan dalam jawaban Andy . Jadi ekstensi akan menjadi ".cer".
sjngm
9

Ini mungkin bukan solusi terbaik. Saya mengubah pakar saya dari 3.3.x ke 3.2.x. Dan masalah ini hilang.

Senthil
sumber
Saya mencoba menginstal sertifikat selama beberapa jam tanpa hasil, dan solusi ini akhirnya berhasil! Versi terbaru dari pakar yang saya dapatkan adalah 3.2.2.
jlars62
3.3.3 dan 3.2.5 tidak bekerja untuk saya, tetapi 3.0.5 bekerja
ROMANIA_engineer
Saya berakhir di sini dari mesin pencari, tetapi saya menggunakan Gradle bukan Maven. Memperbarui Gradle versi lama saya juga memperbaiki masalah SSL aneh ini untuk saya.
Nik Reiman
6

Saya sebenarnya memiliki masalah yang sama.

ketika saya berlari

paket mvn bersih

pada proyek pakar saya, saya mendapatkan kesalahan sertifikat ini oleh alat pakar.

Saya mengikuti @Andy's Answer sampai saya mengunduh file .cer

setelah itu sisa jawaban tidak bekerja untuk saya tetapi saya melakukan yang berikut (saya menjalankan Linux Debian machine)

pertama-tama, jalankan:

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

misalnya dalam kasus saya adalah:

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

jika ditanya tentang kata sandi, tekan saja enter.

perintah ini seharusnya mencantumkan semua sertifikat ssl yang diterima oleh java. ketika saya menjalankan perintah ini, dalam kasus saya, saya mendapat 93 sertifikat misalnya.

Sekarang tambahkan file download cer ke cacerts file dengan menjalankan perintah berikut:

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

tulis kata sandi sudo Anda maka itu akan menanyakan tentang kata sandi keystore

yang standar adalah changeit

kemudian berkata y bahwa Anda percaya sertifikat ini.

jika Anda menjalankan perintah

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

sekali lagi, dalam kasus saya, saya mendapat 94 konten file cacerts

itu berarti, berhasil ditambahkan.

halim
sumber
2

Solusi cepat adalah tambahkan kode ini di pom.xml Anda:

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

Di mana tidak pernah ada untuk menghindari pencarian yang bersertifikat.

jcarlosp1986
sumber
1
Layak untuk menggulir ke bawah di utas jawaban. Ini berhasil!
perak
1

Saya mendapatkan kesalahan yang sama tentang sertifikat SSL ketika Maven mencoba mengunduh modul yang diperlukan secara otomatis.
Sebagai obat, saya mencoba menerapkan jawaban Luke di atas, tetapi menemukan bahwa sertifikat CA Global DigiCert Root sudah ada dalam keystore Java yang tepercaya.

Apa yang membantu saya adalah menambahkan %JAVA_HOME%\binke variabel Path (saya menjalankan Windows). Dan %JAVA_HOME%merupakan lokasi JDK, bukan hanya lokasi JRE, karena Maven membutuhkan JDK.
Saya tidak yakin mengapa itu membantu, tetapi itu berhasil. Saya benar-benar yakin bahwa ini adalah satu-satunya hal yang saya ubah.

Gene M
sumber
1

Langkah 1: DAPATKAN konten Sertifikat situs web (Anda ingin agar itu diimpor sebagai root tepercaya)

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

Langkah 2: Simpan semuanya (termasuk jalur BEGIN CERTIFICATE dan END CERTIFICATE, yang penting dalam kasus ini) sebagai godaddyg2.pem dan impor ke toko trust saya melalui:

Langkah 3: Impor sertifikat di keystore (penyimpanan kunci yang dipercaya java)

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

Apa yang berhasil untuk saya:

Konfigurasikan <proxy> pengaturan di ${MAVEN_HOME}/conf/settings.xml:

(Catatan: Untuk orang lain, ini berfungsi ketika mereka dikonfigurasi ${user.home}/.m2/settings.xml . Jika tidak ada pengaturan.xml di user.home, cukup salin dari conf / di direktori 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>

Lalu tunjukkan pom.xml untuk mengunduh dari 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>

Anda juga mungkin perlu mengkonfigurasi proxy http di IDE Anda. Untuk VSCode disettings.json :

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

Untuk Win10: Mulai / Cari> Pengaturan proxy jaringan> Alamat skrip masukkan deskripsi gambar di sini

Sumber:

perak
sumber
0

Saya mengalami masalah ini dalam situasi yang sama, dan saya menulis jawaban terperinci untuk pertanyaan terkait stack overflow yang menjelaskan bagaimana cara lebih mudah memodifikasi cacerts sistem menggunakan alat GUI. Saya pikir ini sedikit lebih baik daripada menggunakan satu-off keystore untuk proyek tertentu atau memodifikasi pengaturan untuk pakar (yang dapat menyebabkan masalah di jalan).

apocalysque
sumber
0

Meskipun saya meletakkan sertifikat dalam cacerts, saya masih mendapatkan kesalahan. Ternyata kami saya menempatkan mereka di jre, bukan di jdk / jre.

Ada dua keystores, ingatlah itu !!!

Tudor
sumber
0

Masalahnya, yang saya dapatkan adalah Sebelumnya, saya menggunakan jdk 1.8.0_31 dengan sertifikat terpasang. Saya beralih ke jdk 1.8.0_191 tetapi tidak menginstal sertifikat.

Tetapi, proyek saya bekerja dengan baik, saya menyadari bahwa ketergantungan mereka sudah diunduh. Jadi, mereka hanya akan menyusun dan mengemas proyek-proyek itu. Tapi, ini tidak berfungsi untuk proyek pakar baru karena ketergantungan mereka tidak diunduh sebelumnya.

Larutan::

  1. Beralih ke versi jdk yang lebih lama (yang memiliki sertifikat sudah diinstal) untuk proyek baru Anda dan lakukan instalasi bersih
  2. Unduh sertifikat lagi untuk versi jdk baru yang baru saja Anda alihkan dan lakukan instalasi bersih
mitesh keswani
sumber
0

Setelah membuat keystore disebutkan oleh @Andy. Dalam Eclipse, saya menambahkan argumen jvm dan itu berhasil.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Tim
sumber
0

Saya memiliki masalah yang sama dengan SSL dan pakar. Kebijakan TI perusahaan saya membatasi saya untuk membuat perubahan apa pun pada konfigurasi komputer, jadi saya menyalin seluruh .m2 dari komputer saya yang lain dan menempelkan folder .m2 dan berhasil.

folder .m2 biasanya ditemukan di bawah c \ user \ admin

Petak
sumber
-1

Hanya penyebab lain: Jika Anda membuka Charles, Anda juga bisa bertemu masalah ini, dalam hal ini hanya berhenti Charles.

zhuguowei
sumber
-1

Saya hanya menggunakan versi java baru dan itu berhasil untuk saya.

kit
sumber