Saya mencoba mengonfigurasi email saya di Jenkins / Hudson, dan saya terus-menerus menerima kesalahan:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
non-empty
Saya telah melihat sejumlah besar informasi online tentang kesalahan tersebut, tetapi saya belum dapat pekerjaan apa pun. Saya menggunakan Sun's JDK di Fedora Linux (bukan OpenJDK).
Ini beberapa hal yang sudah saya coba. Saya mencoba mengikuti saran dari posting ini , tetapi menyalin cacerts dari Windows ke kotak Fedora saya hosting Jenkins tidak bekerja. Saya mencoba mengikuti panduan ini karena saya mencoba mengkonfigurasi Gmail sebagai server SMTP saya, tetapi tidak berhasil juga. Saya juga mencoba mengunduh dan memindahkan file-file cacert secara manual dan memindahkannya ke folder Java saya menggunakan variasi perintah pada panduan ini .
Saya terbuka untuk semua saran karena saya saat ini mandek. Saya mendapatkannya dari server Windows Hudson, tetapi saya kesulitan di Linux.
${CATALINA_HOME}\conf
tetapiCATALINA_HOME
tidak siap sehingga Tomcat mencari di bawah\conf
truststore.Di Ubuntu 18.04 , kesalahan ini memiliki penyebab berbeda (JEP 229, beralih dari
jks
format default keystore kepkcs12
format, dan pembuatan file cacerts Debian menggunakan default untuk file baru) dan solusinya :Status (2018-08-07) , bug telah diperbaiki di Ubuntu Bionic LTS 18.04.1 dan Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: [SRU] backport ca-sertifikat-java dari cosmic (20180413ubuntu1)
🗹 Ubuntu 1769013: Silakan gabungkan ca-sertifikat-java 20180413 (utama) dari Debian tidak stabil (utama)
🗹 Ubuntu 1739631: Instalasi baru dengan JDK 9 tidak dapat menggunakan file keystore cacerts PKCS12 yang dihasilkan
🗹 docker-library 145: Gambar 9-jdk memiliki masalah SSL
🗹 Debian 894979: ca-sertifikat-java: tidak bekerja dengan OpenJDK 9, aplikasi gagal dengan InvalidAlgorithmParameterException: parameter trustAnchors harus non-kosong
🗹 JDK-8044445: JEP 229: Buat Keystores PKCS12 secara Default
🖺 JEP 229: Buat Keystores PKCS12 secara Default
Jika masalah berlanjut setelah penyelesaian ini, Anda mungkin ingin memastikan bahwa Anda benar-benar menjalankan distribusi Java yang baru saja Anda perbaiki.
Anda dapat mengatur alternatif Java ke 'otomatis' dengan:
Anda dapat memeriksa ulang versi Java yang Anda jalankan:
Ada solusi alternatif juga, tetapi mereka memiliki efek samping sendiri yang akan membutuhkan perawatan tambahan di masa depan, tanpa imbalan apa pun.
Solusi terbaik berikutnya adalah menambahkan baris
ke file
mana yang ada.
Solusi ketiga yang paling tidak bermasalah adalah mengubah nilai
untuk
dalam file
mana saja yang ada, dan kemudian hapus
cacerts
file dan buat kembali dengan cara yang dijelaskan pada baris terakhir dari script pemecahan masalah di bagian atas posting.sumber
Ini memperbaiki masalah saya di Ubuntu:
(ditemukan di sini: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760 )
ca-certificates-java
bukan ketergantungan pada Oracle JDK / JRE jadi ini harus diinstal secara eksplisit.sumber
Pada Ubuntu 18.04 akar penyebabnya adalah konflik antara openjdk-11-jdk (yang merupakan standar) dan paket lain tergantung padanya. Ini sudah diperbaiki di Debian dan akan dimasukkan dalam Ubuntu segera. Sementara itu solusi paling sederhana adalah dengan menurunkan java Anda ke versi 8. Solusi lain menggunakan
ca-certificates-java
jauh lebih rumit.Pertama-tama hapus paket yang bertentangan:
Periksa apakah Anda berhasil menghapus semua paket terkait dengan:
Sistem akan meminta Anda tidak ada Java yang tersedia untuk dikonfigurasi , jika tidak solusi ini gagal .
Kemudian instal ulang paket yang diperlukan:
sumber
openjdk-8-jdk
paket, menghapus/etc/ssl/certs/java/cacerts
file, dan menjalankansudo update-ca-certificates -f
yang merupakan cara bundaran beralih daripkcs12
file cacerts diformat ke yangjks
diformat, seperti yang dijelaskan di tempat lain di utas ini.EJP pada dasarnya menjawab pertanyaan (dan saya menyadari ini memiliki jawaban yang diterima), tetapi saya hanya berurusan dengan gotcha kasus tepi ini dan ingin mengabadikan solusi saya.
Saya memiliki
InvalidAlgorithmParameterException
kesalahan pada Jira yang di-host server yang sebelumnya saya atur untuk akses khusus-SSL. Masalahnya adalah bahwa saya telah mengatur keystore saya dalam format PKCS # 12, tetapi truststore saya dalam format JKS.Dalam kasus saya, saya telah mengedit
server.xml
file saya untuk menentukan keystoreType ke PKCS, tapi saya tidak menentukan truststoreType, jadi defaultnya adalah apa pun keystoreType. Menentukan truststoreType secara eksplisit ketika JKS menyelesaikannya untuk saya.sumber
Saya mengalami solusi ini dari posting blog Memperbaiki masalah trustAnchors ketika menjalankan OpenJDK 7 pada OS X :
Memperbaiki masalah trustAnchors saat menjalankan OpenJDK 7 pada OS X. Jika Anda menjalankan OpenJDK 7 pada OS X dan telah melihat pengecualian ini:
Ada perbaikan sederhana. Cukup tautkan dalam file cacerts yang sama dengan yang digunakan JDK 1.6 Apple:
Anda perlu melakukan ini untuk setiap versi OpenJDK yang telah Anda instal. Ubah saja
-v 1.7
ke versi yang ingin Anda perbaiki. Jalankan/usr/libexec/java_home -V
untuk melihat semua JRE dan JDK yang telah Anda instal.Mungkin orang-orang OpenJDK dapat menambahkan ini ke skrip instalasi mereka.
sumber
security
folder (blacklisted.certs
,local_policy.jar
, danUS_export_policy.jar
) untuk Java untuk menjadi bahagia.cacerts
dalamjre
direktori?Di Ubuntu 12.10 (Quantal Quetzal) atau lebih baru, sertifikat disimpan dalam paket ca-sertifikat-java . Menggunakan
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
akan mengambilnya terlepas dari apa JDK yang Anda gunakan.sumber
update-ca-certificates -f
secara manual, untuk mengisi file cacertsSaya mengalami masalah ini pada OS X, menggunakan JDK 1.7, setelah memutakhirkan ke OS X v10.9 (Mavericks). Perbaikan yang berhasil bagi saya adalah menginstal ulang versi Apple Java, tersedia di http://support.apple.com/kb/DL1572 .
sumber
Saya berlari
untuk membuat file sertifikat, dan kemudian:
Saya kembali dalam bisnis, terima kasih kawan. Sangat disayangkan itu tidak termasuk dalam instalasi, tapi aku sampai di sana pada akhirnya.
sumber
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure**
saya mendapatkansudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found
sudo update-ca-certificates -f
cukup pada jessie Debian denganopenjdk-8-jre-headless
dari jessie-backports, selamaca-certificates-java
diinstal. Saya pikir urutan masalah instalasi (JRE setelahca-certificates-java
dapat menyebabkan ini, karena yang terakhir tidak memiliki pemicu untuk Java 8 yang di-backport).sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
tanpa bintang **update-ca-certificates -f
adalah hal yang memperbaikinya. Saya tidak membutuhkan perintah ke-2Kesalahan mengatakan bahwa sistem tidak dapat menemukan truststore di jalur yang disediakan dengan parameter
javax.net.ssl.trustStore
.Di bawah Windows saya menyalin
cacerts
file darijre/lib/security
ke direktori instalasi Eclipse (tempat yang sama denganeclipse.ini
file) dan menambahkan pengaturan berikut dieclipse.ini
:Saya punya beberapa masalah dengan path ke cacerts (variabel% java_home% environment entah bagaimana ditimpa), jadi saya menggunakan solusi sepele ini.
Idenya adalah untuk menyediakan jalur yang valid ke file truststore - idealnya akan menggunakan yang relatif. Anda juga dapat menggunakan jalur absolut.
Untuk memastikan jenis toko adalah JKS, Anda akan menjalankan perintah berikut:
sumber
Menghapus paket java-sertifikat-java dan menginstalnya lagi bekerja untuk saya ( Ubuntu MATE 17.10 (Artful Aardvark)).
Terima kasih, jdstrand: Komentar 1 untuk bug 983302, Re: ca-sertifikat-java gagal menginstal Java cacerts di Oneiric Ocelot .
sumber
Saya mengalami banyak masalah keamanan setelah memutakhirkan ke OS X v10.9 (Mavericks):
trustAnchors
parameter harus kosongSaya menerapkan pembaruan Java ini dan memperbaiki semua masalah saya: http://support.apple.com/kb/DL1572?viewlocale=en_US
sumber
Saya mengharapkan hal-hal seperti ini, karena saya menggunakan JVM alternatif di Talend Open Studio saya (dukungan saat ini hanya ada sampai JDK 1.7). Saya menggunakan 8 untuk tujuan keamanan ... pokoknya
Perbarui toko sertifikat Anda:
kemudian
tambahkan nilai baru dalam parameter inisialisasi Anda
Bagi saya, entri kedua berhasil. Saya pikir, tergantung pada versi Talend Open Studio / TEnt + JVM, ia memiliki nama parameter yang berbeda, tetapi mencari file keystore yang sama.
sumber
javax.net.ssl.trustAnchors
? Itu tidak disebutkan dalam dokumentasi JSSE.Bagi saya itu disebabkan oleh kurangnya sertifikat kepercayaan di truststore.
Untuk menguji, gunakan:
Ini memberi saya:
Meskipun PrivateKeyEntry saya mengandung CA, ia perlu diimpor secara terpisah :
Itu mengimpor sertifikat, dan kemudian menjalankan kembali
keytool -list -keystore keystore.jks
sekarang memberikan:Sekarang ia memilikiCertEntry tepercaya, dan Tomcat akan mulai dengan sukses.
sumber
Beberapa rilis OpenJDK vendor menyebabkan ini dengan memiliki
cacerts
file kosong didistribusikan dengan biner. Bug dijelaskan di sini: https://github.com/AdoptOpenJDK/openjdk-build/issues/555Anda dapat menyalin ke
adoptOpenJdk8\jre\lib\security\cacerts
file dari instalation lama sepertic:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts
.Versi buggy AdoptOpenJDK adalah https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip
sumber
Jika Anda mengalami ini di Ubuntu dengan JDK9 dan Maven, Anda dapat menambahkan opsi JVM ini - periksa dulu apakah ada jalur:
Jika file tidak ada, coba instal ca-sertifikat-java seperti yang dicatat orang:
sumber
Saya mendapat pesan kesalahan ini pada Java 9.0.1 di Linux. Itu karena bug yang diketahui dari JDK, di mana file cacerts kosong dalam paket biner .tar.gz (diunduh dari http://jdk.java.net/9/ ).
Lihat paragraf "masalah yang diketahui" pada JDK 9.0.1 Catatan Rilis , mengatakan "TLS tidak bekerja secara default pada OpenJDK 9".
Pada Debian / Ubuntu (dan mungkin turunan lainnya), solusi sederhana adalah mengganti file cacerts dengan yang dari paket "ca-Certificate-java":
Di Red Hat Linux / CentOS, Anda dapat melakukan hal yang sama dari paket "ca-sertifikat":
sumber
Saya mengalami masalah ini ketika mencoba menggunakan Maven 3, setelah memutakhirkan dari Ubuntu 16.04 LTS (Xenial Xerus) ke Ubuntu 18.04 LTS (Bionic Beaver).
Memeriksa / usr / lib / jvm / java-8-oracle / jre / lib / keamanan menunjukkan bahwa file cacerts saya adalah tautan simbolis yang menunjuk ke
/etc/ssl/certs/java/cacerts
.Saya juga memiliki file yang mencurigakan
cacerts.original
.Saya berganti nama
cacerts.original
menjadicacerts
, dan itu memperbaiki masalah.sumber
cacerts.original
berkas itu dijks
format, dan dihasilkan dengan Ubuntu 16.04 Java 8, yang digunakan bahwa format sebagaimana default. Thecacerts
berkas itu dalampkcs12
format yang dihasilkan oleh Ubuntu 18.04 ini Java 10, yang menggunakan format ini sebagai default. Seperti yang dijelaskan di bagian lain di utas ini, format baru mengharuskan Anda meneruskan kata sandi ke file yang dapat dieksekusi. Tetapi selama Anda menghasilkanjks
cacerts
file kosong baru atau menyalin yang lama, proses pembuatan generasi berikutnya akan mengosongkan file yang sudah ada, dan mengisinya dengan sertifikat CA dari sistem file.Saya juga menemukan ini pada OS X setelah memperbarui OS X v10.9 (Mavericks), ketika Java 6 lama digunakan dan mencoba mengakses URL HTTPS. Cara mengatasinya adalah kebalikan dari Peter Kriens; Saya perlu menyalin
cacerts
dari ruang 1,7 ke lokasi yang terhubung dengan versi 1.6:sumber
Dalam kasus saya, file JKS yang digunakan dalam aplikasi klien rusak. Saya membuat yang baru dan mengimpor sertifikat SSL server tujuan di dalamnya. Kemudian saya menggunakan file JKS baru dalam aplikasi klien sebagai toko kepercayaan, seperti:
Sumber: Java SSL dan keystore sertifikat
Saya menggunakan alat (KeyStore Explorer) untuk membuat JKS baru. Anda dapat mengunduhnya dari tautan ini, KeyStore Explorer .
sumber
Anda juga dapat mengalami kesalahan ini setelah memutakhirkan ke Spring Boot 1.4.1 (atau yang lebih baru) karena membawa Tomcat 8.5.5 sebagai bagian dari dependensinya.
Masalahnya adalah karena cara Tomcat berurusan dengan toko kepercayaan. Jika Anda telah menetapkan lokasi trust store Anda sama dengan keystore Anda di konfigurasi Spring Boot, Anda mungkin akan mendapatkan
trustAnchors parameter must be non-empty
pesan saat memulai aplikasi.Hapus saja
server.ssl.trust-store
konfigurasi kecuali Anda tahu bahwa Anda membutuhkannya, dan lihat tautan di bawah ini.Masalah-masalah berikut ini mengandung lebih banyak detail tentang masalah:
sumber
Saya mengalami masalah ini dengan SDK Android SDKman. Bagi saya solusi ini berhasil:
/usr/lib/jvm/java-8-oracle/jre/lib/security/
cacert
dengancacert.original
The
cacert
berkas adalah satu kecil (22B). Saya telah menginstaloracle-java8-installer
darippa:webupd8team/java
(sesuai dengan manual ini: https://docs.nativescript.org/start/ns-setup-linux ).sumber
Sebagai catatan, tidak ada jawaban di sini yang bekerja untuk saya. Bangunan Gradle saya mulai gagal secara misterius dengan kesalahan ini, tidak dapat mengambil HEAD dari pusat Maven untuk file POM tertentu .
Ternyata saya telah mengatur JAVA_HOME untuk build OpenJDK pribadi saya, yang telah saya buat untuk debugging masalah javac. Pengaturan kembali ke JDK yang diinstal pada sistem saya memperbaikinya.
sumber
Di Red Hat Linux, saya mengatasi masalah ini dengan mengimpor sertifikat
/etc/pki/java/cacerts
.sumber
Anda harus menambahkan dua baris di atas ke kode Anda. Ia tidak dapat menemukan truststore.
sumber
java -Djavax.net.ssl.trustStore=/tmp/cacerts ...
atau jika Anda ingin mengaturnya secara global untuk semua program yang dijalankan dengan JDK, tambahkan baris ke file JDKmanagement.properties
.Saya menghadapi masalah ini saat menjalankan perangkat Android untuk pengujian pada Ubuntu 14.04 (Trusty Tahr). Dua hal bekerja untuk saya seperti yang disarankan oleh shaheen:
sumber
Tidak ada solusi yang saya temukan di Internet yang berfungsi, tetapi versi modifikasi dari jawaban Peter Kriens tampaknya berhasil.
Pertama temukan folder Java Anda dengan menjalankan
/usr/libexec/java_home
. Bagi saya itu1.6.0.jdk
versinya. Lalu pergi kelib/security
subfoldernya (untuk saya/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security
).Kemudian hapus
cacerts
file tersebut jika sudah ada dan cari satu di sistem dengansudo find / -name "cacerts"
. Ia menemukan banyak item untuk saya, dalam versi Xcode atau aplikasi lain yang telah saya instal, tetapi juga di/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts
mana saya memilih.Gunakan file itu dan buat tautan simbolik ke sana (saat berada di dalam folder Java dari sebelumnya)
sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"
,, dan itu akan berfungsi.Saya memiliki keduanya - Java dari unduhan Apple 2017-001 ( https://support.apple.com/kb/dl1572 - Saya berasumsi dari situlah sertifikat yang benar berasal) dan yang Oracle terinstal di Mac OS X v10.12 (Sierra) .
sumber
pada ubuntu 14.04 dengan openjdk 11 dari ppa: openjdk-r / ppa ini berfungsi untuk saya:
di java.security ubah jenis keystore menjadi
kemudian:
ketika Anda memeriksa apakah itu berhasil, pastikan Anda tidak menggunakan daemon apa pun dengan java lama masih berjalan (mis.
--no-daemon
opsi untuk gradle)bug ini menjelaskan semuanya dengan baik dan akan membantu Anda memahami apa yang terjadi di https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631
sumber
Di Ubuntu 18.04 saya perlu menggunakan OpenJDK 1.7 untuk pemeliharaan proyek lama. Saya mengunduh paket biner. Tetapi ketika saya menjalankan skrip saya di atasnya saya mendapat kesalahan yang sama.
Solusinya adalah menghapus
cacerts
file JDK yang diunduh dijre/lib/security
folder dan kemudian membuatnya sebagai symlink kecacerts
file sistem di/etc/ssl/certs/java/
:sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts
sumber
Peluang kecil ini akan membantu siapa pun kecuali .... untuk siapa saja yang menjalankan Java 8 dari Docker Image pada Raspberry Pi (menggunakan AMD CPU) Saya mendapatkan Dockerfile berikut untuk membangun dan menjalankan dengan sukses untuk saya
sumber