Hata - trustAnchors parametresi boş olmamalı


492

Jenkins / Hudson'daki e-postamı yapılandırmaya çalışıyorum ve sürekli olarak hatayı alıyorum:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
    non-empty

Çevrimiçi hatayla ilgili çok fazla bilgi gördüm, ancak işe yaramadım. Sun'ın JDK'sını Fedora Linux'ta kullanıyorum (OpenJDK değil).

İşte denediğim birkaç şey. Bu tavsiye aşağıdaki çalıştı yazı , ancak üzerinde Jenkins iş vermedi barındırma benim Fedora kutusuna Windows'tan cacerts kopyalama. Gmail'i SMTP sunucum olarak yapılandırmaya çalışırken bu kılavuzu izlemeyi denedim , ancak işe yaramadı. Ayrıca bu cacert dosyalarını manuel olarak indirmeye ve taşımayı ve bu kılavuzdaki komutların bir varyasyonunu kullanarak Java klasörüme taşımayı denedim .

Şu anda takıldığım için herhangi bir öneriye açığım. Bir Windows Hudson sunucusundan çalışmaya başladım, ancak Linux'ta mücadele ediyorum.

Yanıtlar:


513

Bu tuhaf mesaj, belirttiğiniz güvenilir mağazanın:

  • boş,
  • bulunamadı veya
  • açılamadı (örneğin erişim izinleri nedeniyle).

Aşağıdaki @ AdamPlumb'un cevabına da bakınız .

Bu sorunu çözmek (bu konuda yazdığı için buraya ) ile ekleyebilir truststore kullanılıyor anlamak mülkiyet javax.net.debug = Tüm ardından truststore ilgili günlükleri filtre. Belirli bir truststore belirtmek için javax.net.ssl.trustStore özelliği ile de oynayabilirsiniz. Örneğin :


    java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=/Another/path/to/cacerts -jar test_get_https-0.0.1-SNAPSHOT-jar-with-dependencies.jar https://www.calca.com.py 2>&1| grep -i truststore

1
Teşekkürler EJP, yazınızı burada gördüm ama orada truststore'un nasıl doğrulanacağından emin değildim. Ayrıca server.xml dosyamı da getirdim ama truststore'un nasıl doğrulanacağından emin değildim. Sadece keystoreFile = "conf / .keystore" pref'yi (bu dosyada keystoreFile yoktu) kontrol ediyor muyum?
David Gill

2
Cevap, onu nasıl ithal ettiğimle ilgiliydi. Çok önemli bir adımı atlamış gibiydim. Bkz. [Java Hatası InvalidAlgorithmParameterException] [1] [1]: jyotirbhandari.blogspot.com/2011/09/…
David Gill

2
Bu cevabın doğru olduğunu onayladı. Tomcat altında hata alıyordum. Truststore'um vardı ${CATALINA_HOME}\confama CATALINA_HOMEayarlanmıyordu, bu yüzden Tomcat \conftruststore'u aradı.
SingleShot

4
@BubblewareTechnology Hayır, hata sertifikayı dosyaya nasıl aktardığınız değil dosya adındaydı. Blogunuz doğru değil. Ayrıca JRE $ / cacerts dosyasını değiştirmenizi önermemelisiniz. Bir sonraki Java yükseltmesini değiştirecek. Kopyalayan, kopyaya kendi sertifikanızı ekleyen ve kopyayı güven deposu olarak kullanan bir işleme ihtiyacınız var. Her Java yükseltmesini tekrarlayın. Ve Java'ya kendi güven deposundan bahsetmenize gerek yok, sadece farklıysa, kendiniz hakkında.
Lorne Marquis

3
Bir bükülme ekleyeceğim: truststore mevcut olsa bile, erişilebilir, doğru formatta, TAMAMEN BOŞ ise, çeşitli kütüphanelerle (Apache HttpClient dahil) alabileceğiniz hata budur.
Alan Franzoni

265

In Ubuntu 18.04 , bu hata, farklı bir nedeni vardır (den JEP 229, anahtarı jksiçin anahtar deposu varsayılan biçimi pkcs12formatında ve Debian yeni dosyalar için varsayılan kullanarak dosya nesil cacerts) ve geçici çözümü :

# Ubuntu 18.04 and various Docker images such as openjdk:9-jdk throw exceptions when
# Java applications use SSL and HTTPS, because Java 9 changed a file format, if you
# create that file from scratch, like Debian / Ubuntu do.
#
# Before applying, run your application with the Java command line parameter
#  java -Djavax.net.ssl.trustStorePassword=changeit ...
# to verify that this workaround is relevant to your particular issue.
#
# The parameter by itself can be used as a workaround, as well.

# 0. First make yourself root with 'sudo bash'.

# 1. Save an empty JKS file with the default 'changeit' password for Java cacerts.
#    Use 'printf' instead of 'echo' for Dockerfile RUN compatibility.
/usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts

# 2. Re-add all the CA certs into the previously empty file.
/var/lib/dpkg/info/ca-certificates-java.postinst configure

Durum (2018-08-07) , hata Ubuntu Bionic LTS 18.04.1 ve Ubuntu Cosmic 18.10'da düzeltildi.


🗹 Ubuntu 1770553: [SRU] backport ca-sertifikalar-java kozmik (20180413ubuntu1)

🗹 Ubuntu 1769013: Lütfen Debian kararsızından (ana) ca-sertifikalar-java 20180413 (ana) birleştirin

🗹 Ubuntu 1739631: JDK 9 ile yeni yükleme, oluşturulan PKCS12 cacerts anahtar deposu dosyasını kullanamıyor

🗹 docker-library 145: 9-jdk resminde SSL sorunları var

🗹 Debian 894979: ca-certificate-java: OpenJDK 9 ile çalışmaz, uygulamalar InvalidAlgorithmParameterException ile başarısız olur: trustAnchors parametresi boş olmamalıdır

K JDK-8044445: JEP 229: Varsayılan olarak PKCS12 Anahtar Depoları Oluşturma

🖺 JEP 229: Varsayılan olarak PKCS12 Anahtar Depoları Oluşturma


Bu geçici çözümden sonra sorun devam ederse, yeni düzelttiğiniz Java dağıtımını çalıştırdığınızdan emin olmak isteyebilirsiniz.

$ which java
/usr/bin/java

Java alternatiflerini aşağıdakilerle 'otomatik' olarak ayarlayabilirsiniz:

$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so

Yürüttüğünüz Java sürümünü iki kez kontrol edebilirsiniz:

$ java --version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

Alternatif çözümler de vardır, ancak bunların herhangi bir geri ödeme yapılmaksızın gelecekteki ekstra bakım gerektiren kendi yan etkileri vardır.

Sonraki en iyi geçici çözüm satırı eklemektir

javax.net.ssl.trustStorePassword=changeit

dosyalara

/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties

hangisi varsa.

Üçüncü en az problemli çözüm,

keystore.type=pkcs12

için

keystore.type=jks

dosyalarda

/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security

hangisi varsa seçin ve ardından cacertsdosyayı kaldırın ve yayının en üstündeki geçici çözüm komut dosyasının son satırında açıklanan şekilde yeniden oluşturun.


50
Ubuntu 18 kullanıcıları, bunu okuyun! bu hayatınızın birçok saatini kurtaracak! Teşekkür ederim!
vak

5
Bu yanıt, Ubuntu 18.04'te maven ile aynı hatayı düzeltmeme yardımcı oldu. / Etc / ssl / certs / java / cacerts dosyasının sahibini kökten kendime yazmak zorunda kaldım. Sonra geri döndüm.
Yuri Gor

77
Ben sudo rm / etc / ssl / certs / java / cacerts ve sonra sudo güncelleme-ca-sertifikalar -f ve bu kubuntu 18.04 benim sorunum düzeltildi.
jsn

2
@jsn, çözümler için teşekkürler, ubuntu 18.04
Samrat

2
@ JSN çözümü de + openjdk8 Debian Stretch için çalışmış
HRJ

105

Bu Ubuntu benim için sorunu düzeltti:

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

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

ca-certificates-java Oracle JDK / JRE içinde bir bağımlılık değildir, bu yüzden bu açıkça yüklenmelidir.


2
Teşekkürler, Ubuntu 15.04'te karşılaştığımda bu sorunu çözdüm.
Macil

Raspberry Pi
Defozo

1
Debian jesse ile OpenJDK8 ile istikrarlı backport'larla bu sorunla karşılaştı ve bu sorunu düzeltti. Docker görüntüleri oluştururken bunu kullanıyordum. :)
Tuxdude

9
Ne yazık ki Ubuntu MATE 18.04 üzerinde çalışmıyor. Java'yı yeniden yüklemeyi deneyeceğim.
Pranav A.23

1
@codefx - Önerilerinizi yaptım ve işe yaramadı - Java 10 ile Ubuntu 18.x'te (varsayılan).
mzedeler

69

Ubuntu 18.04'te temel neden, openjdk-11-jdk (varsayılan) ve buna bağlı olarak diğer paketler arasında bir çakışmadır. Debian'da zaten düzeltildi ve kısa süre içinde Ubuntu'ya dahil edilecek. Bu arada en basit çözüm, java'nızı sürüm 8'e indirmektir. Diğer çözümlerin ca-certificates-javakullanımı çok daha karmaşıktır.

Önce çakışan paketleri kaldırın:

sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge

İlgili tüm paketleri başarıyla sildiğinizden emin olun:

sudo update-alternatives --config java

Sistem sizden yapılandırılacak hiçbir Java olmadığını bildirecektir , aksi halde bu geçici çözüm başarısız olur .

Ardından gerekli paketleri yeniden yükleyin:

sudo apt-get install openjdk-8-jdk

Bu açıklama aslında yanlıştır ve yalnızca Windows'u yeniden yüklemekle aynı anlamda sorunu düzeltebilir. Tüm Java paketlerini kaldırmanıza gerek yoktur. Bu şekilde gitmek istiyorsanız, yalnızca openjdk-8-jdkpaketi yüklemeniz, /etc/ssl/certs/java/cacertsdosyayı kaldırmanız ve bu iş parçacığında başka bir yerde açıklandığı gibi biçimlendirilmiş bir cacerts dosyasından biçimlendirilmiş bir dosyaya geçmenin sudo update-ca-certificates -fdolambaçlı yolu olan çalıştırmanız gerekir . pkcs12jks
Mikael Gueck

1
@MikaelGueck Mantık sizin tarafınızda gibi görünse de, daha önce yorumunuzda ve en çok oy verilen cevaplarda tam olarak ne yaptığımı garanti etmek için buradayım ve 18.04'te çalışan tek cevap bu . Düşündüğünüz oy, bir üst oylama olmalı ya da en azından hak edilmediği için yok olmalıdır.
Andrea Ligios

@AndreaLigios, senaryoları kendiniz okuyabilirsiniz, oldukça kısa. JDK anahtar dosyası işleyici kodu, çünkü 8'den 10'a kadar sabit kodlu bir JAVA_HOME yolu kümesi var, bunları birer birer deniyorlar, okuyabileceğiniz Debian CA dosya oluşturucusunu çağırıyorlar, okuyabilirsiniz, bir uyumluluk yedek modu vardır. Bilgisayarınız bu basit yazılımı farklı çalıştırıyorsa, başka sorunlarla da karşılaşabilirsiniz. Java alternatiflerinizi değiştirdiniz ve başka bir JVM çağırdınız, çünkü kaldırıldıktan sonra alternatifler sıfırlanmış olabilir mi?
Mikael Gueck

1
@MikaelGueck evet, önceki denemelerden birinde java alternatiflerimi değiştirdim, bu yüzden muhtemelen buydu. Kaynak koduna girmeyi ve işlerin nasıl çalıştığını öğrenen ilk kişi benim, ama bu bugün hedefim değildi, gerçek hedefime giden yoldaki 5-6 farklı beklenmedik engelden sadece biriydi. Bu cevap, sorunu 2 dakikadan daha kısa sürede çözmemi sağladı! Senaryolara bakmak ve daha iyi bir çözüm bulmak için ne kadar zaman ayırmalıydım? Ve ne için, biraz megabayt kurtarmak için? Bu sert, ama işe yarıyor (ve sorun ne olursa olsun), bu yüzden cehennem gibi meşgul olanlar için
OP'ye

1
2 gündür bir çözüm arıyordum ve cevabınız sorunumu çözdü, teşekkürler. Sadece Kubuntu 18.04'e geçiyorum, bu üzerinde çalıştı.
guepardomar

55

EJP temel olarak soruyu yanıtladı (ve bunun kabul edilmiş bir cevabı olduğunu anlıyorum), ama sadece bu uç dava ile uğraştım ve çözümümü ölümsüzleştirmek istedim.

InvalidAlgorithmParameterExceptionBarındırılan bir Jira hatası aldım önce yalnızca SSL erişimi için ayarladığım sunucusunda . Sorun, anahtar depomu PKCS # 12 biçiminde ayarlamış olmamdı, ancak güven mağazam JKS biçimindeydi.

Benim durumumda, server.xmlPKCS'ye keystoreType belirtmek için dosyamı düzenledim , ancak truststoreType belirtmedim, bu yüzden keystoreType ne olursa olsun varsayılan. TruststoreType'ı açıkça JKS olarak belirtmek benim için çözdü.


iyi, çözümünüzü ölümsüzleştirmenize yardımcı oluyorum. ilginç olduğu yer burası.
n611x007

2
Bu benim sorunumdu. Spring Boot 1.4.2.RELEASE kullanıyordum ve bir donanım anahtar deposu ve yazılım güven deposu vardı. Anahtar deposu için sağlayıcıyı ve türü belirledim, ancak güven deposunu değil. Sonuç olarak, güven sağlayıcı tarafından yanlış sağlayıcı ve tür kullanıldı. Bunları (SUN ve JKS) belirtmek sorunu çözdü.
Kenco

12
bunu tam olarak nasıl yaptın? (buradaki pencereler)
tatsu

2
Bugün Android torunumla karşılaş, neredeyse ne dediğini anlıyorum ama nasıl çözeceğini söylemiyorsun. Yardımcı olmayan cevap
Lothar

52

Ben blog yayınında bu çözümün koştu OS X üzerinde OpenJDK 7 çalıştıran trustAnchors sorununu gidermek, :

OS X'te OpenJDK 7 çalıştırırken trustAnchors sorununu giderme. OS X'de OpenJDK 7 çalıştırıyorsanız ve bu istisnayı gördüyseniz:

Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors
    parameter must be non-empty

Basit bir düzeltme var. Apple'ın JDK 1.6'nın kullandığı aynı cacerts dosyasına bağlanmanız yeterlidir:

cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts

Bunu, yüklediğiniz her OpenJDK sürümü için yapmanız gerekir. Sadece değiştirmek -v 1.7düzeltmek istediğiniz sürüme. /usr/libexec/java_home -VYüklediğiniz tüm JRE'leri ve JDK'ları görmek için çalıştırın .

Belki de OpenJDK adamları bunu kurulum komut dosyalarına ekleyebilir.


1
"Ln" komutumun (OSX 10.6.8'de) "h" seçeneği yoktur; ne yapmak gerekiyor?
Andrew Swan

1
Ah, biri / usr / bin (varsayılan) ve biri / bin olmak üzere iki "ln" komutum vardı; ikincisinin "h" seçeneği vardı ve çalıştı.
Andrew Swan

Bu 1.6 tekniği ile sistem 1.8 kurulumundan cacerts'e bağlanan kırık 1.6 kurulumumu düzelttim. Teşekkürler!
A21z

1
Gelecekteki okuyucular için: o da bulunmaktadır diğer 3 dosya istiyor gibi bir securityklasöre ( blacklisted.certs, local_policy.jarve US_export_policy.jarmutlu olmak Java için).
awksp

@Peter Kriens, neden dizin cacertsaltına bağlı jre?
BAE

45

In Ubuntu 12.10 (Quantal Quetzal) veya daha sonra sertifika düzenlenmektedir ca-sertifikalar-java paketinin. Kullandığınız -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacertsJDK'ya bakılmaksızın kullanmak onları alır.


54
update-ca-certificates -fCacerts dosyasını doldurmak için el ile çalıştırmam gerektiğine karar verdim
Portablejim

4
@Portablejim Teşekkürler. Yorumunuz Ubuntu 15.04beta'da Apache Spark'ı oluşturduğum ilk sorunu çözdü.
Paul

1
Teşekkürler @Portablejim, yorumunuz Ubuntu 15.04'te benim için çalıştı.
David Berg

Teşekkürler. Bu PhpStrom + yamalı JDK ile benim sorunum düzeltildi. Bu anahtarı "phpstorm64.vmoptions" dosyasına yazdım.
Vijit

Ubuntu 18.04 ve JDK'da benim için çalışmıyor 1.8.0_62
Devendra Singraul

34

OS X v10.9'a (Mavericks) yükselttikten sonra JDK 1.7 kullanarak OS X'te tam olarak bu sorunla karşılaştım . Benim için çalışan düzeltme, Java'nın http://support.apple.com/kb/DL1572 adresindeki Apple sürümünü yeniden yüklemekti .


OSX'de Grails tarafından kullanılan Java 6 ile karşılaştım. Ayrıca Oracle'dan Java 7 yükledim ve Mavericks'e geçtim. Java 6'yı Apple web sitesinden yeniden yüklemek de sorunu benim için düzeltti.
pm_labs

Ubuntu bulut kutusuna açık jdk 6 yüklerken bu durumla karşılaştım. Tanıdık bir yüzü görmek güzel, BTW
Ben Hutchison

30

Koştum

sudo update-ca-certificates -f

bir sertifika dosyası oluşturmak için:

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

İşe geri döndüm, teşekkürler çocuklar. Tesisatta bulunmaması üzücü, ama sonunda oraya vardım.


Ben çalıştırdığınızda sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure**alıyorumsudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found
Magick

Sadece sudo update-ca-certificates -file Debian jessie yeterli olduğu openjdk-8-jre-headlesssürece kadar gelen Jessie-backports ca-certificates-javayüklenir. Yükleme sırası önemlidir (JRE sonra buna ca-certificates-javaneden olabilir, çünkü ikincisi destekli Java 8 için herhangi bir tetikleyici yok).
mirabilos

2
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure yıldız olmadan **
Yu Jiaao

update-ca-certificates -fdüzelten şey. İkinci komuta ihtiyacım yoktu
Mark Jeronimus

17

Hata, sistemin güven deposunu parametre ile sağlanan yolda bulamadığını söyler javax.net.ssl.trustStore .

Windows altında cacertsdosyayı jre/lib/securityEclipse kurulum dizinine kopyaladım ( dosya ile aynı yer eclipse.ini) ve aşağıdaki ayarları ekledim eclipse.ini:

-Djavax.net.ssl.trustStore=cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.trustStoreType=JKS

Cacerts yolu ile bazı sorunlar vardı (% java_home% ortam değişkeni üzerine yazılır), bu yüzden bu önemsiz çözümü kullandım.

Fikir, truststore dosyasına geçerli bir yol sağlamaktır - ideal olarak, göreli bir dosya kullanmak olacaktır. Ayrıca mutlak bir yol da kullanabilirsiniz.

Mağaza türünün JKS olduğundan emin olmak için aşağıdaki komutu çalıştırırsınız:

keytool -list -keystore cacerts

Keystore type: JKS
Keystore provider: SUN

2
Aslında işe yarayan tek cevap bu. Teşekkürler @razvanone
Akshar Patel

1
Ben küçük bir "gotcha" vurmak başardı: eclipse.ini dosyasındaki üç satır gerçek üç ayrı satırda olmalıdır. Başlangıçta hepsini bir satıra koydum ve tutulma bunu almadı.
SiKing

16

Ca-certificate-java paketinin kaldırılması ve yeniden kurulması benim için çalıştı ( Ubuntu MATE 17.10 (Artful Aardvark)).

sudo dpkg --purge --force-depends ca-certificates-java

sudo apt-get install ca-certificates-java

Teşekkürler, jdstrand: Hata 983302 için yorum 1, Re: ca-sertifikalar-java Oneiric Ocelot Java cacerts yüklemek için başarısız .


11

OS X v10.9'a (Mavericks) yükselttikten sonra çok fazla güvenlik sorunu yaşadım :

  • Amazon AWS ile SSL sorunu
  • Eşin Maven ve Eclipse ile kimliği doğrulanmadı
  • trustAnchors parametre boş olmamalı

Bu Java güncellemesini uyguladım ve tüm sorunlarımı düzeltti: http://support.apple.com/kb/DL1572?viewlocale=tr


5
Ugh. Java 6, kamu desteğinin sona ermesinden uzun yıllar sonra ve kesinlikle güvenlik açıklarıyla doludur. Apple, Java 7/8 ile çalıştırılamayan daha eski yazılımların yürütülmeye devam edebilmesi için indirilmesini sağlar, ancak genel internet üzerindeki 1. SSL gibi hizmetler için SSL bağlantıları yapmak için kullanılmamalıdır. AWS, 2. Maven Merkez, 3. başka bir şey.
Zac Thompson

10

Talend Open Studio'mda alternatif bir JVM kullandığım gibi böyle şeyler bekledim (şu anda destek sadece JDK 1.7'ye kadar var). Güvenlik amacıyla 8 kullanıyorum ... neyse

  • Sertifika deponuzu güncelleyin:

    sudo update-ca-certificates -f

sonra

  • başlatma parametrelerinize yeni bir değer ekleyin

    sudo gedit $(path to your architecture specific ini i.e. TOS_DI...ini)
    
    Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts

Benim için ikinci giriş işe yaradı. Bence, Talend Open Studio / TEnt + JVM sürümüne bağlı olarak, farklı bir parametre adı var, ancak aynı anahtar deposu dosyasını arıyor.


4
Mülkü javax.net.ssl.trustAnchorsnereden aldın ? JSSE belgelerinde belirtilmemiştir.
Lorne Marquis

10

Benim için truststore'da güvenilen birCertEntry eksikliğinden kaynaklanıyordu.

Test etmek için şunu kullanın:

keytool -list -keystore keystore.jks

Bana verir:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

cert-alias, 31-Jul-2017, PrivateKeyEntry

PrivateKeyEntry bir CA içeriyor olsa da, ayrı olarak içe aktarılması gerekiyor :

keytool -import -alias root-ca1 -file rootca.crt -keystore keystore.jks

Sertifikayı içe aktarır ve keytool -list -keystore keystore.jksşimdi yeniden çalıştırılması şunları sağlar:

Your keystore contains 2 entries

cert-alias, 31-Jul-2017, PrivateKeyEntry,
Certificate fingerprint (SHA1):
<fingerprint>
root-ca1, 04-Aug-2017, trustedCertEntry,
Certificate fingerprint (SHA1):
<fingerprint>

Şimdi bir güvenilenCertEntry var ve Tomcat başarıyla başlayacak.


NB onay baeldung öğretici yararlı bir Makefile ile anahtar deposu & truststore (ilkbahar-güvenlik-x509 projesi) oluşturmaya kısayol olarak baeldung.com/x-509-authentication-in-spring-security
hello_earth

9

Bazı OpenJDK satıcıları cacerts, bunun ikili dosya ile dağıtılmış boş bir dosyaya sahip olması nedeniyle ortaya çıkar . Hata burada açıklanmaktadır: https://github.com/AdoptOpenJDK/openjdk-build/issues/555

Gibi adoptOpenJdk8\jre\lib\security\cacertseski bir kurulumdan dosyaya kopyalayabilirsiniz c:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts.

AdoptOpenJDK buggy sürümü https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip


Bence bu benim için de geçerli. AdoptOpenJDK 202'de bu hata var ve 222'de çalışıyor. Bu yüzden mümkünse jdk'nizi güncelleyin.
Marty

6

Bunu JDK9 ve Maven ile Ubuntu'da yaşıyorsanız, bu JVM seçeneğini ekleyebilirsiniz - önce yolun mevcut olup olmadığını kontrol edin:

-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts

Dosya eksikse, ca-certificate-java'yı birisinin belirttiği gibi yüklemeyi deneyin:

sudo apt install ca-certificates-java

Docker kullanıyorsanız, "maven: 3-jdk-9" yerine "maven: 3-jdk-9-slim" resmini de deneyebilirsiniz
Konstantin Pavlov

Teşekkürler, ubuntu 18.04 openjdk-8-jdk benim için çalıştı
Aftab Naveed

4

Linux'ta Java 9.0.1'de bu hata mesajını aldım. Cacerts dosyasının .tar.gz ikili paketinde ( http://jdk.java.net/9/ adresinden indirildiği) JDK'nın bilinen bir hatasından kaynaklanıyordu. ) .

JDK 9.0.1 Sürüm Notları'nın "bilinen sorunlar" paragrafına bakın "TLS, OpenJDK 9'da varsayılan olarak çalışmaz" diyerek .

Debian / Ubuntu'da (ve muhtemelen diğer türevlerde), basit bir çözüm, cacerts dosyasını "ca-certificate-java" paketinden biriyle değiştirmektir:

sudo apt install ca-certificates-java
cp /etc/ssl/certs/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts

Red Hat Linux / CentOS'ta, aynısını "ca-certificate" paketinden yapabilirsiniz:

sudo yum install ca-certificates
cp /etc/pki/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts

4

Ubuntu 16.04 LTS'den (Xenial Xerus) Ubuntu 18.04 LTS'ye (Biyonik Kunduz) yükselttikten sonra Maven 3'ü kullanmaya çalışırken bu sorunu yaşadım .

/ Usr / lib / jvm / java-8-oracle / jre / lib / security denetlenmesi, cacerts dosyamın işaret eden sembolik bir bağlantı olduğunu gösterdi /etc/ssl/certs/java/cacerts .

Ayrıca şüpheli bir şekilde adlandırılmış bir dosyam vardı cacerts.original.

Ben değiştirildi cacerts.originaletmek cacertsve bu sorunu düzeltildi.


cacerts.originalDosya oldu jksbiçimi ve bunun varsayılan olarak bu biçimi kullanılan Ubuntu 16.04 takımından Java 8 ile oluşturuldu. cacertsDosya oldu pkcs12Ubuntu 18.04 ile üretilen biçimi, onun varsayılan olarak bu biçimi kullanan Java 10, bu. Bu iş parçacığının başka bir yerinde açıklandığı gibi, yeni biçim parolayı yürütülebilir dosyaya geçirmenizi gerektirir. Ancak, yeni bir boş jks cacertsdosya oluşturduğunuz veya eskisini kopyaladığınız sürece, sonraki cacerts oluşturma işlemi mevcut dosyayı boşaltır ve dosya sistemindeki CA sertifikalarıyla yeniden doldurur.
Mikael Gueck

3

Ayrıca, eski Java 6 kullanıldığında ve bir HTTPS URL'sine erişmeye çalışıldığında OS X v10.9'u (Mavericks) güncelledikten sonra OS X'te de karşılaştım. Düzeltme Peter Kriens'in tersiydi; cacerts1.7 alanından 1.6 sürümü ile bağlantılı konuma kopyalamak gerekiyordu :

(as root)
umask 022
mkdir -p /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
cp $(/usr/libexec/java_home -v 1.7)/jre/lib/security/cacerts \
    /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security

1
Buradaki komut, bir dizini bir dosyaya kopyalamaya çalışır; Hiç bir anlam ifade etmiyor.
praseodym

Ters çözüm kullanma değerlendirmesiyle hemfikirim. JDk1.6'nın bozuk bir softlink /Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/lib/security/cacerts -> /System/Library/Java/Support/CoreDeploy.bundle olduğunu keşfettim / İçindekiler / Ev / lib / güvenlik / cacerts. Bu yüzden kırık yumuşak bağlantı rm'ed, sonra jdk1.7 kurulumundan cacerts kopyalandı.
James A Wilson

NOT: işiniz bittiğinde, izinleri doğrulamak için kopyaladığınız cacerts dosyasına erişebilmeniz gerekir.
Gri

Ayrıca, doğru yönde gitmek için cp düzeltildi ve mkdir ve cp için umask eklendi.
Gri

3

Benim durumumda, istemci uygulamasında kullanılan JKS dosyası bozuk. Yeni bir tane oluşturdum ve hedef sunucu SSL sertifikalarını içeri aktardım. Sonra istemci uygulamasında yeni JKS dosyasını bir güven deposu olarak kullandım, örneğin:

System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);

Kaynak: Java SSL ve sertifika anahtar deposu

Yeni JKS oluşturmak için (KeyStore Explorer) aracını kullanıyorum. Bu bağlantıdan, KeyStore Explorer'dan indirebilirsiniz .


keystore-explorer işi benim için yaptı. Sadece varsayılan anahtar deposu oluşturmanız ve site / ana makine için sertifika dosyasını incelemeniz ve kaydetmeniz yeterlidir.
Shantha Kumara

3

Tomcat'i beraberinde getirdiğinden Spring Boot 1.4.1'e (veya daha yenisine) yükselttikten sonra da bu hatayla karşılaşabilirsiniz. 8.5.5'i bağımlılıklarının bir parçası olarak yenisine .

Sorun Tomcat'in güven deposuyla ilgilenme biçiminden kaynaklanıyor. Spring Store yapılandırmasında anahtar deponuzla aynı anahtar deposu konumunuzu belirttiyseniz, büyük olasılıkla trustAnchors parameter must be non-emptyuygulamayı başlatırken iletiyi alırsınız.

server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks

Sadece server.ssl.trust-storeİhtiyacınız olduğunu bilmediğiniz sürece yapılandırmayı bu durumda aşağıdaki bağlantılara bakın.

Aşağıdaki sorunlar sorunla ilgili daha fazla ayrıntı içerir:


3

Android SDK sdkmanager ile bu sorunla karşılaştım. Benim için bu çözüm işe yaradı:

  1. Adresine git /usr/lib/jvm/java-8-oracle/jre/lib/security/
  2. Değiştir cacertilecacert.original

cacertDosya küçücük bir (22B) idi. Ben yüklemiş oracle-java8-installerdan ppa:webupd8team/java(: bu kılavuza uygun https://docs.nativescript.org/start/ns-setup-linux ).


2

Kayıt için, buradaki cevapların hiçbiri benim için işe yaramadı. Gradle derlemim bu hatayla gizemli bir şekilde başarısız olmaya başladı, belirli bir POM için Maven merkezinden HEAD getirilemedi dosyası .

JAVA_HOME'un bir javac sorununu hata ayıklamak için oluşturduğum kendi kişisel OpenJDK yapım olarak ayarladığım ortaya çıktı. Sistemimde yüklü olan JDK'ya geri ayarlamak sorunu çözdü.


... bu da güven deposunun diğer cevaplara göre bulunmamasına neden oldu.
Lorne Marquis

1
Eğer çözemiyorum yaparsak Evet ama truststore bulunamıyor bilerek tamamen yararsız neden o bulduk varlık değildir. Yanlış gidebilmesinin birçok olası yolu vardır ve bunların hiçbiri kendi sisteminiz için başarısız olmasının belirli bir yolu olmadığında sinir bozucudur.
user3562927

Hepsi aynı hatayla `` olur '': belirtilen güvenilir mağaza açılamadı veya boştu. Bu durumun ortaya çıkabileceği milyonlarca yol var ve SO üzerinde hepsini numaralandırmak için yeterli alan yok.
Lorne Marquis

1

Red Hat Linux'ta sertifikaları içe aktararak bu sorunu çözdüm /etc/pki/java/cacerts.


1
System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\user-id\\Desktop\\tomcat\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "passwd");

Yukarıdaki iki satırı kodunuza eklemelisiniz. Güven deposunu bulamıyor.


2
Bunu yapmazsanız, JRE truststore'u kullanacak ve kesinlikle bunu bulabilecektir. Hata, bu parametrelerdeki eksikliklerden değil, yanlış değerlerden kaynaklanır. Kodunuzda adlandırılan dosya, genel olarak değil, yalnızca yüklemeniz için geçerlidir.
Lorne Marquis

Bu özellikleri ayarlamanın uygun yolu, bunları komut satırına iletmektir: java -Djavax.net.ssl.trustStore=/tmp/cacerts ...veya bunları JDK ile çalışan tüm programlar için global olarak ayarlamak istiyorsanız, satırı JDK'nın management.propertiesdosyasına ekleyin .
Mikael Gueck

1

Ubuntu 14.04 (Trusty Tahr) üzerinde test için belirli bir Android paketini çalıştırırken bu sorunla karşılaştım . Shaheen'in önerdiği gibi iki şey benim için çalıştı:

sudo update-ca-certificates -f

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

1

İnternette bulduğum çözümlerin hiçbiri işe yaramadı, ancak Peter Kriens'in cevabının değiştirilmiş bir versiyonu işi yapıyor gibi görünüyor.

Önce Java klasörünüzü çalıştırarak bulun /usr/libexec/java_home. Benim için 1.6.0.jdkversiyon buydu. Sonra onun lib/securityalt klasörüne gidin (benim için /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security).

Daha sonra cacertsdosyayı varsa silin ve sistemde bir dosyayı arayın sudo find / -name "cacerts". Xcode veya yüklediğim diğer uygulamaların sürümlerinde benim için birden fazla öğe buldu, aynı zamanda /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacertsseçtiğim.

Bu dosyayı kullanın ve dosyaya sembolik bir bağlantı yapın (daha önce Java klasörü içindeyken) sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"ve çalışması gerekir.

Her ikisine de sahibim - Apple'ın 2017-001 sürümünden Java indir ( https://support.apple.com/kb/dl1572 - Sanırım doğru sertifikaların bulunduğu yer) ve Oracle'ın Mac OS X v10.12'de (Sierra) yüklü .


1

ubuntu 14.04'te ppa'dan openjdk 11 ile: openjdk-r / ppa bu benim için çalıştı:

java.security içinde anahtar deposu türünü

keystore.type=jks

sonra:

sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java

çalışıp çalışmadığını kontrol ettiğinizde, eski java ile çalışan herhangi bir arka plan programı kullanmadığınızdan emin olun (örneğin --no-daemon, sınıflandırma seçeneği)

bu hata her şeyi güzelce açıklar ve neler olduğunu anlamanıza yardımcı olur https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631


1

Ubuntu 18.04'te eski bir projenin bakımı için OpenJDK 1.7 kullanmam gerekiyordu. İkili paketi indirdim. Ama senaryomu çalıştırdığımda aynı hatayı aldım.

Çözüm, cacertsindirilen JDK dosyasını jre/lib/securityklasörde kaldırmak ve daha sonra içindeki sistem cacertsdosyasına sembolik bağlantı olarak oluşturmaktı /etc/ssl/certs/java/:

sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts


1

İnce şans bu herkese yardımcı olacaktır ama .... Raspberry Pi üzerinde bir Docker Image Java 8 çalışan herkes için (AMD CPU kullanarak) benim için başarıyla inşa ve çalıştırmak için aşağıdaki Dockerfile var

FROM hypriot/rpi-java
USER root

WORKDIR /usr/build/

RUN /usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts
RUN update-ca-certificates -f
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure

EXPOSE 8080

ARG JAR_FILE=target/app-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-Djavax.net.ssl.trustStorePassword=changeit", "-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts", "-jar", "app.jar"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.