I'm mencoba untuk mendapatkan tweet menggunakan twitter4j perpustakaan untuk proyek java. Pertama saya menjalankan aku punya kesalahan sertifikat matahari.keamanan.validator.ValidatorException
dan matahari.keamanan.penyedia.certpath.SunCertPathBuilderException
. Kemudian saya menambahkan twitter sertifikat oleh:
C:\Program Files\Java\jdk1.7.0_45\jre\lib\security>keytool -importcert -trustcacerts -file PathToCert -alias ca_alias -keystore "C:\Program Files\Java\jdk1.7.0_45\jre\lib\security\cacerts"
Tetapi tanpa keberhasilan. Berikut ini adalah prosedur untuk mendapatkan twitters:
public static void main(String[] args) throws TwitterException {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("myConsumerKey")
.setOAuthConsumerSecret("myConsumerSecret")
.setOAuthAccessToken("myAccessToken")
.setOAuthAccessTokenSecret("myAccessTokenSecret");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
try {
Query query = new Query("iphone");
QueryResult result;
result = twitter.search(query);
System.out.println("Total amount of tweets: " + result.getTweets().size());
List<Status> tweets = result.getTweets();
for (Status tweet : tweets) {
System.out.println("@" + tweet.getUser().getScreenName() + " : " + tweet.getText());
}
} catch (TwitterException te) {
te.printStackTrace();
System.out.println("Failed to search tweets: " + te.getMessage());
}
Dan di sini adalah kesalahan:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Relevant discussions can be found on the Internet at:
http://www.google.co.jp/search?q=d35baff5 or
http://www.google.co.jp/search?q=1446302e
TwitterException{exceptionCode=[d35baff5-1446302e 43208640-747fd158 43208640-747fd158 43208640-747fd158], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.5}
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177)
at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:81)
at twitter4j.TwitterImpl.get(TwitterImpl.java:1929)
at twitter4j.TwitterImpl.search(TwitterImpl.java:306)
at jku.cc.servlets.TweetsAnalyzer.main(TweetsAnalyzer.java:38)
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(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:34)
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:141)
... 5 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(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 20 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 26 more
Failed to search tweets: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Pergi ke URL di browser firefox anda, klik pada HTTPS rantai sertifikat (di samping alamat URL). Klik "info" > "keamanan" > "menunjukkan sertifikat" > "rincian" > "ekspor.."
. Pickup nama dan pilih jenis file contoh.cer. Sekarang anda memiliki file dengan keystore dan anda harus menambahkannya ke JVM
Menentukan lokasi cacerts file, misalnya.
C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.
Selanjutnya impor contoh.cer
file ke cacerts di command line:
keytool-impor alias contoh -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -contoh file.cer
Anda akan diminta untuk password yang default adalah changeit
Restart anda JVM/PC.
sumber: http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html
Setelah berjam-jam mencoba untuk membangun cert file untuk Java 6 instalasi bekerja dengan twitter baru cert's, akhirnya aku tersandung ke solusi yang sangat sederhana dimakamkan dalam sebuah komentar di salah satu papan pesan. Hanya menyalin cacerts file dari Jawa 7 instalasi dan menimpa satu di Jawa 6 instalasi. Mungkin yang terbaik untuk membuat cadangan dari cacerts file yang pertama, tetapi kemudian anda hanya copy baru dan BOOM! ini hanya bekerja.
Perhatikan bahwa saya benar-benar disalin Windows cacerts file ke instalasi Linux dan itu bekerja dengan baik.
File ini terletak di jre/lib/security/cacerts
dalam perjanjian lama dan baru Java jdk instalasi.
Semoga ini bisa menyelamatkan orang lain jam kejengkelan.
SAYA UI pendekatan:
CMD-Line:
Saya telah tersandung pada masalah ini yang mengambil banyak jam penelitian untuk memperbaiki, khususnya dengan auto-generated sertifikat, yang tidak Resmi yang, cukup rumit dan Jawa tidak seperti mereka yang banyak.
Silahkan cek link berikut: Memecahkan Masalah dengan sertifikat di Jawa
Pada dasarnya anda harus menambahkan sertifikat dari server ke Jawa Rumah sertifikat.
InstallCert
dan mengeksekusi sementara server berjalan, memberikan argumen berikut server[:port]
. Tidak ada sandi diperlukan, seperti password asli bekerja untuk Jawa sertifikat ("changeit").jssecerts
file dalam direktori di mana anda mengeksekusi Program (Jika dijalankan dari Eclipse maka pastikan anda mengkonfigurasi direktori Pekerjaan di Run -> Konfigurasi
).$JAVA_HOME/jre/lib/security
Setelah mengikuti langkah-langkah ini, koneksi dengan sertifikat tidak akan menghasilkan pengecualian lagi di pulau Jawa.
Berikut kode sumber adalah penting dan itu menghilang dari (Sun) Oracle blog, satu-satunya halaman yang saya temukan itu pada link yang disediakan, oleh karena itu saya melampirkan jawaban untuk setiap referensi.
/*
* Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Sun Microsystems nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Originally from:
* http://blogs.sun.com/andreas/resource/InstallCert.java
* Use:
* java InstallCert hostname
* Example:
*% java InstallCert ecc.fedora.redhat.com
*/
import javax.net.ssl.*;
import java.io.*;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* Class used to add the server's certificate to the KeyStore
* with your trusted certificates.
*/
public class InstallCert {
public static void main(String[] args) throws Exception {
String host;
int port;
char[] passphrase;
if ((args.length == 1) || (args.length == 2)) {
String[] c = args[0].split(":");
host = c[0];
port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
String p = (args.length == 1) ? "changeit" : args[1];
passphrase = p.toCharArray();
} else {
System.out.println("Usage: java InstallCert [:port] [passphrase]");
return;
}
File file = new File("jssecacerts");
if (file.isFile() == false) {
char SEP = File.separatorChar;
File dir = new File(System.getProperty("java.home") + SEP
+ "lib" + SEP + "security");
file = new File(dir, "jssecacerts");
if (file.isFile() == false) {
file = new File(dir, "cacerts");
}
}
System.out.println("Loading KeyStore " + file + "...");
InputStream in = new FileInputStream(file);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, passphrase);
in.close();
SSLContext context = SSLContext.getInstance("TLS");
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
context.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory factory = context.getSocketFactory();
System.out.println("Opening connection to " + host + ":" + port + "...");
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setSoTimeout(10000);
try {
System.out.println("Starting SSL handshake...");
socket.startHandshake();
socket.close();
System.out.println();
System.out.println("No errors, certificate is already trusted");
} catch (SSLException e) {
System.out.println();
e.printStackTrace(System.out);
}
X509Certificate[] chain = tm.chain;
if (chain == null) {
System.out.println("Could not obtain server certificate chain");
return;
}
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
System.out.println();
System.out.println("Server sent " + chain.length + " certificate(s):");
System.out.println();
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
MessageDigest md5 = MessageDigest.getInstance("MD5");
for (int i = 0; i < chain.length; i++) {
X509Certificate cert = chain[i];
System.out.println
(" " + (i + 1) + " Subject " + cert.getSubjectDN());
System.out.println(" Issuer " + cert.getIssuerDN());
sha1.update(cert.getEncoded());
System.out.println(" sha1 " + toHexString(sha1.digest()));
md5.update(cert.getEncoded());
System.out.println(" md5 " + toHexString(md5.digest()));
System.out.println();
}
System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
String line = reader.readLine().trim();
int k;
try {
k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
} catch (NumberFormatException e) {
System.out.println("KeyStore not changed");
return;
}
X509Certificate cert = chain[k];
String alias = host + "-" + (k + 1);
ks.setCertificateEntry(alias, cert);
OutputStream out = new FileOutputStream("jssecacerts");
ks.store(out, passphrase);
out.close();
System.out.println();
System.out.println(cert);
System.out.println();
System.out.println
("Added certificate to keystore 'jssecacerts' using alias '"
+ alias + "'");
}
private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
private static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 3);
for (int b : bytes) {
b &= 0xff;
sb.append(HEXDIGITS[b >> 4]);
sb.append(HEXDIGITS[b & 15]);
sb.append(' ');
}
return sb.toString();
}
private static class SavingTrustManager implements X509TrustManager {
private final X509TrustManager tm;
private X509Certificate[] chain;
SavingTrustManager(X509TrustManager tm) {
this.tm = tm;
}
public X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
throw new UnsupportedOperationException();
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
this.chain = chain;
tm.checkServerTrusted(chain, authType);
}
}
}
Cobalah untuk memuat target URL di browser dan lihat situs's certificate (biasanya's dapat diakses oleh ikon dengan tanda kunci. It's pada sisi kiri atau kanan dari browser's address bar) apakah itu's kadaluarsa atau expired oleh alasan lain.
Versi baru biasanya datang dengan diperbarui set sertifikat terpercaya.
Juga jika itu's mungkin, uninstall versi lama. Ini akan membuat misconfiguration kesalahan eksplisit.
Jika anda mengembangkan di bawah JDK lain dari yang terbaru - cobalah untuk mengganti %JAVA_HOME%/jre/lib/security/cacerts
file baru dengan salah satu dari yang terbaru terinstal JRE (membuat salinan cadangan pertama) sebagai @jeremy-goodell menunjukkan dalam bukunya jawaban
Jika tidak ada yang di atas memecahkan masalah anda menggunakan keytool
untuk menyimpan sertifikat(s) ke Jawa's keystore:
keytool -trustcacerts -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit -importcert -alias <alias_name> -file <path_to_crt_File>
File dengan sertifikat dapat diperoleh dari browser seperti @MagGGG menunjukkan dalam bukunya jawaban.
Catatan 1: anda mungkin perlu untuk mengulang ini untuk setiap sertifikat dalam rantai untuk situs anda's sertifikat. Mulai dari akar satu.
Catatan 2: <alias_name>
harus unik di antara kunci-kunci di toko atau keytool
akan menampilkan pesan kesalahan.
Untuk mendapatkan daftar semua sertifikat di toko anda dapat menjalankan:
keytool -list -trustcacerts -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit
Dalam kasus sesuatu yang tidak beres ini akan membantu anda untuk menghapus sertifikat dari toko:
keytool -delete -alias <alias_name> -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit
Saya punya situasi yang sedikit berbeda, ketika kedua JDK dan JRE 1.8.0_112 hadir pada sistem saya.
Aku diimpor baru sertifikat CA ke [JDK_FOLDER]\jre\lib\security\cacerts
menggunakan yang sudah dikenal perintah:
keytool -import -trustcacerts -keystore cacerts -alias <new_ca_alias> -file <path_to_ca_cert_File>
Namun, saya terus mendapatkan yang sama CARA jalan gedung gagal kesalahan.
Saya menambahkan informasi debug ke jawa CLI, dengan menggunakan jawa -Djavax.net.debug=semua ... > debug.log
. Di debug.log file, baris yang dimulai dengan trustStore adalah: benar-benar menunjuk ke cacerts toko ditemukan di [JRE_FOLDER]\lib\security\cacerts
.
Dalam kasus saya, solusi untuk menyalin cacerts file yang digunakan oleh JDK (yang telah CAs baru ditambahkan) lebih dari satu yang digunakan oleh JRE dan yang tetap masalah.
Latar Belakang Masalah:
Saya mendapatkan error berikut ketika saya mencoba untuk menjalankan mvn clean install di proyek saya dan melalui Netbeans IDE bersih dan membangun pilihan. Masalah ini adalah karena sertifikat tidak tersedia ketika kita download melalui NET beans IDE/melalui command prompt, tetapi dapat untuk men-download file melalui browser.
Error:
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.java.project:product:jar:1.0.32 from/to repo-local (https://url/local-repo): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Resolusi:
1. Download sertifikat Url dalam pertanyaan:
2. Sekarang instal key store untuk memperbaiki masalah.
C:\Program Files\Java\jdk1.8.0_141\jre\bin>keytool -importcert -file "C:/user/sheldon/desktop/product.cer" -alias produk -keystore "C:/Program Files/Java/jdk1.8.0_141/jre/lib/security/cacerts".
Contoh perintah baris perintah/output:
keytool -importcert -file "C:/Users/sheldon/Desktop/product.cer" -alias product -keystore "C:/Program iles/Java/jdk1.8.0_141/jre/lib/security/cacerts"
Enter keystore password:
Trust this certificate? [no]: yes
Certificate was added to keystore
Saya ingin mengimpor sertifikat untuk smtp.gmail.com
Hanya solusi yang bekerja untuk saya adalah
Masukkan perintah untuk melihat sertifikat ini
D:\openssl\bin\openssl.exe s_client-menghubungkan smtp.gmail.com:465
Copy dan simpan garis antara "-----BEGIN CERTIFICATE-----" dan "-----END SERTIFIKAT-----" ke dalam sebuah file, gmail.cer
Menjalankan
keytool-impor alias smtp.gmail.com keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file C:\Users\Admin\Desktop\gmail.cer
Masukkan password chageit
Klik ya untuk mengimpor sertifikat
Restart jawa
sekarang jalankan perintah dan anda baik untuk pergi
Alasannya, kita mendapatkan kesalahan di atas adalah bahwa JDK dibundel dengan banyak dipercaya Otoritas Sertifikat(CA) sertifikat ke sebuah file yang bernama 'cacerts' tapi file ini tidak memiliki petunjuk tentang kami sertifikat self-signed. Dengan kata lain, cacerts file yang tidak memiliki sertifikat self-signed impor dan dengan demikian tidak memperlakukan itu seperti yang terpercaya dan karenanya memberikan kesalahan di atas.
Cara untuk memperbaiki kesalahan di atas
Untuk memperbaiki kesalahan di atas, semua yang kita butuhkan adalah untuk mengimpor sertifikat self-signed ke cacerts file.
Pertama, cari cacerts file. Kita akan perlu untuk mengetahui lokasi JDK. Jika anda menjalankan aplikasi anda melalui salah satu IDE seperti Eclipse atau IntelliJ Idea pergi ke pengaturan proyek dan mencari tahu apa adalah JDK lokasi. Untuk e.g pada Mac OS khas lokasi cacerts file yang akan di lokasi ini /Library/Java/JavaVirtualMachines/ {{JDK_version}}/Isi/Home/jre/lib/security pada Jendela ini, mesin itu akan berada di bawah {{Installation_directory}}/{{JDK_version}}/jre/lib/security
Sekali anda telah cacerts file, sekarang kita perlu untuk impor kami sertifikat self-signed ini cacerts file. Cek artikel terakhir, jika anda tidak tahu bagaimana untuk menghasilkan sertifikat yang ditandatangani dengan benar.
Jika anda tidak memiliki file sertifikat(.crt) dan hanya memiliki .jks file yang anda dapat menghasilkan .crt file dengan menggunakan perintah di bawah ini. Dalam kasus anda sudah memiliki .crt/.pem file maka anda dapat mengabaikan perintah di bawah ini
keytool -export -keystore keystore.jks -alias selfsigned -file selfsigned.crt
Langkah diatas akan menghasilkan file bernama selfsigned.crt.Sekarang Mengimpor sertifikat ke cacerts
keytool -importcert -file selfsigned.crt -alias selfsigned -keystore {{cacerts path}}
untuk e.g
keytool -importcert -file selfsigned.nextgen.crt -alias selfsigned.nextgen -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts
Itu semua, restart aplikasi anda dan harus bekerja dengan baik. Jika masih tidak bekerja dan mendapatkan SSL handshake terkecuali. Itu mungkin berarti anda menggunakan domain yang berbeda kemudian terdaftar dalam sertifikat.
Link dengan penjelasan rinci dan langkah demi langkah resolusi di sini.
Ini isn't Twitter-jawaban tertentu, tapi ini adalah pertanyaan yang muncul ketika anda mencari untuk kesalahan ini. Jika sistem anda menerima kesalahan ini saat menghubungkan ke situs web yang muncul untuk memiliki sertifikat yang sah bila dilihat dalam browser web, itu mungkin berarti situs web yang memiliki lengkap sertifikat rantai.
Untuk ringkasan singkat dari masalah: Sertifikat Otoritas don't menggunakan Sertifikat Root untuk menandatangani hanya sertifikat. Sebaliknya, mereka (biasanya) tanda intermediate sertifikat yang juga memiliki Sertifikat Otoritas menetapkan bendera (yaitu, diperbolehkan untuk menandatangani sertifikat). Kemudian ketika anda membeli sertifikat dari CA, mereka menandatangani CSR dengan salah satu sertifikat menengah.
Java anda percaya store kemungkinan besar hanya memiliki Akar Cert, bukan antara orang-orang.
Salah konfigurasi situs mungkin kembali just mereka menandatangani cert. Masalah: itu ditandatangani dengan perantara cert yang's tidak dalam kepercayaan anda di toko. Browser akan menangani masalah ini dengan men-download atau menggunakan cache sertifikat menengah; ini memaksimalkan website kompatibilitas. Jawa dan alat-alat seperti OpenSSL, namun, tidak't. Dan itu akan menyebabkan kesalahan dalam pertanyaan.
Anda dapat memverifikasi ini kecurigaan dengan menggunakan Qualys SSL Tes. Jika anda menjalankan bahwa terhadap sebuah situs dan kata
Ini server's rantai sertifikat tidak lengkap.
kemudian yang menegaskan hal itu. Anda juga dapat melihat ini dengan melihat sertifikasi jalur dan melihat teks Extra Download.
Cara untuk memperbaiki kesalahan ini: server administrator harus mengkonfigurasi web server untuk mengembalikan sertifikat menengah juga. Untuk Comodo, misalnya, ini adalah di mana .ca-bundle
file yang berguna. Misalnya, dalam konfigurasi Apache dengan mod_ssl, anda'd gunakan SSLCertificateChainFile
pengaturan konfigurasi. Untuk nginx, anda perlu untuk menggabungkan menengah sertifikat dan sertifikat yang ditandatangani dan menggunakannya dalam SSL cert konfigurasi. Anda dapat menemukan lebih banyak dengan mencari "tidak lengkap rantai sertifikat" online.
Saya datang di pertanyaan ini ketika mencoba untuk menginstal Mentimun-Eclipse plugin di Eclipse melalui situs update. Aku diterima sama SunCertPathBuilderException kesalahan:
Unable to read repository at http://cucumber.io/cucumber-eclipse/update-site/content.xml.
Unable to read repository at http://cucumber.io/cucumber-eclipse/update-site/content.xml.
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Sementara beberapa yang lain jawaban yang tepat dan membantu untuk pertanyaan ini's situasi tertentu, mereka tetap tidak membantu dan tidak menyesatkan untuk masalah saya.
Dalam kasus saya, masalah ini adalah bahwa URL yang disediakan untuk mereka memperbarui situs ini:
Namun ketika menavigasi melalui browser, maka diarahkan untuk (catatan ditambahkan ".github"):
Jadi resolusi adalah untuk hanya menggunakan dialihkan versi update situs URL saat menambahkan situs update di eclipse.
Saya menghadapi masalah yang sama dan mendapatkan ini diselesaikan dengan menggunakan langkah-langkah sederhana di bawah ini:
Download InstallCert.java dari google
Kompilasi menggunakan javac InstallCert.java
Menjalankan InstallCert.java menggunakan jawa InstallCert.java, dengan hostname dan port https, dan tekan "1" ketika meminta masukan. Itu akan menambah "localhost" seperti yang terpercaya keystore, dan menghasilkan sebuah file bernama "jssecacerts" seperti di bawah ini:
jawa InstallCert localhost:443
Sumber utama untuk menyelesaikan masalah di sini adalah:
https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html
Ini adalah solusi tetapi dalam bentuk cerita saya dengan masalah ini:
Aku hampir mati mencoba semua solusi yang diberikan di atas(untuk 3 hari ) dan tidak ada yang bekerja untuk saya.
Saya kehilangan semua harapan.
Saya menghubungi saya dan tim keamanan mengenai hal ini karena saya berada di belakang proxy dan mereka mengatakan bahwa mereka baru-baru ini diperbarui kebijakan keamanan mereka.
Aku memarahi mereka buruk untuk tidak menginformasikan kepada Pengembang.
Kemudian mereka mengeluarkan baru "cacerts" file yang berisi semua sertifikat.
Saya dihapus cacerts file yang ada di dalam %JAVA_HOME%/jre/lib/security dan memecahkan masalah saya.
Jadi jika anda menghadapi masalah ini mungkin dari jaringan anda tim juga seperti ini.
It's selain untuk jawabannya https://stackoverflow.com/a/36427118/1491414. Terima Kasih @MagGGG
Aku tetap ini menggunakan metode di bawah ini-
Bila anda memiliki kesalahan di atas dengan atlassian software ex. jira
2018-08-18 11:35:00,312 Caesium-1-4 WARN anonymous Default Mail Handler [c.a.mail.incoming.mailfetcherservice] Default Mail Handler[10001]: javax.mail.MessagingException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target while connecting to host 'imap.xyz.pl' as user '[email protected]' via protocol 'imaps, 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
anda dapat menambahkan sertifikat ke sana's terpercaya keystore (perubahan missing_ca tepat cert nama):
keytool -importcert -file missing_ca.crt -alias missing_ca -keystore /opt/atlassian/jira/jre/lib/security/cacerts
Jika diminta password masukan changeit
dan mengkonfirmasi y
Setelah itu cukup restart jira.