JVM'min hangi anahtar deposunu kullandığını nasıl öğrenebilirim?


125

JVM anahtar depoma bir sertifika aktarmam gerekiyor. Ben aşağıdakileri kullanıyorum:

keytool -import -alias daldap -file somecert.cer

bu yüzden muhtemelen aramamı aşağıdaki gibi bir şeye çevirmem gerekir:

keytool -import -alias daldap -file somecert.cer -keystore cacerts storepass changeit

1
İmzalı bir CSR olmadığı sürece JVM güven deponuza bir sertifika aktarmanız gerekir ; bu durumda sertifikayı kendi anahtar deponuza aktarmanız gerekir ve bunun nerede olduğunu zaten bilmeniz gerekir, aksi takdirde anahtar çifti veya CSR.
Marquis of Lorne

Yanıtlar:


129

Anahtar deponuz JAVA_HOME---> JRE -->lib---> security--> cacerts. JAVA_HOME'unuzun nerede yapılandırıldığını kontrol etmeniz gerekiyor, muhtemelen bu yerlerden biri,

  1. Bilgisayar -> Gelişmiş -> Ortam değişkenleri -> JAVA_HOME

  2. Sunucu başlangıç ​​toplu iş dosyalarınız.

İçe aktarma komutunuzda -keystore cacerts (sadece cacerts demek yerine burada yukarıdaki JRE'nin tam yolunu verin).


6
/ Kitaplık / Java / Ana Sayfa / lib / security / cacerts - Mac OS X 10.9'da
Sam Barnum

9
* "JAVA_HOME ---> JRE -> lib ---> security -> cacerts" Sadece gelecekteki okuyucular için "sondaki" s "yi not edin.
Keir Nellyer

4
Öyleyse, Java'nın yeni bir sürümünü yüklersem ve JAVA_HOME yeni bir dizini işaret ediyorsa, sertifika sorunlarım olacak mı?
Kirill Yunussov

1
@KirillYunussov: Eski JRE'ye herhangi bir sertifika yüklediyseniz, aynı sertifikaları yeni JRE'ye de aktarmanız gerekir.
kosa

4
Bu, bence anahtar deposu konumu yerine güven deposu konumu.
user2001850

36

Anahtar Deposu Konumu

Her keytool komutunun, -keystorekeytool tarafından yönetilen anahtar deposu için kalıcı anahtar deposu dosyasının adını ve konumunu belirtme seçeneği vardır . Anahtar deposu varsayılan .keystoreolarak, "user.home" sistem özelliği tarafından belirlendiği şekilde kullanıcının ana dizininde adlandırılan bir dosyada saklanır . UName kullanıcı adı verildiğinde, "user.home" özellik değeri varsayılan olarak

C:\Users\uName on Windows 7 systems
C:\Winnt\Profiles\uName on multi-user Windows NT systems
C:\Windows\Profiles\uName on multi-user Windows 95 systems
C:\Windows on single-user Windows 95 systems

Bu nedenle, kullanıcı adı "cathy" ise, "user.home" varsayılan olarak

C:\Users\cathy on Windows 7 systems
C:\Winnt\Profiles\cathy on multi-user Windows NT systems
C:\Windows\Profiles\cathy on multi-user Windows 95 systems

http://docs.oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html


1
Bu gizemli ~/.keystoredosyayı arıyordum ! -keystoreParametreyi bıraktıysam , hangi varsayılan anahtar deposu keytoolhedeflemesini bulamadım . cacertsMakinede başka bir yer arıyordum . Keytool'un ~/.keystoreana dizinde üretmesini veya .keystorebunun yerine adlandırılmasını beklemiyordum cacerts. Java halkının belgelemesi gereken bir boşluğu doldurdunuz! Teşekkür ederim!
George Pantazes

26

Java 1.8 ile Mac OS X 10.12:

$ JAVA_HOME / jre / lib / güvenlik

cd $JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

Oradan içeride:

./jre/lib/security

Orada bir cacerts anahtar depom var.

Bunu bir VM seçeneği olarak belirtmek için:

-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit

Bunun doğru yol olduğunu söylemiyorum (java neden JAVA_HOME içinde bakmayı bilmiyor?), Ama onu çalıştırmak için yapmam gereken şey bu.


16

Bunu "Ev" dizininizde bulabilirsiniz:

Windows 7'de:

C:\Users\<YOUR_ACCOUNT>\.keystore

Linux'ta (Ubuntu):

/home/<YOUR_ACCOUNT>/.keystore

4
Windows'ta bu dizine sahip değilim
simgineer

1
Bir anahtar deposu belirtmeden bir -keygen yaptım, geçerli dizinde bir tane oluşturmasını bekliyordum, ama dediğin gibi evimde yarattı. ~ / .keystore Yıllardır bulamadı! :-) Teşekkürler.
Eurospoofer

java özelliği windows tarafından ayarlanmaya user.homeeşit olduğundan $HOMEDRIVE$HOMEPATHve $HOMEcygwin tarafından ayarlanmadığı için cygwin altında windows yolu kullanıldığını eklememe izin verin HOMEDRIVE=C:veHOMEPATH=\Users\[YOUR ACCOUNT]
user1708042

13

Bu benim için çalışıyor:

#! / Bin / bash

CACERTS = $ ( readlink - e $ ( dirname $ ( readlink - e $ ( hangi keytool ))) /../ lib / security / cacerts )

eğer keytool - listedeki - deposu $ CACERTS - storepass changeit > / dev / boş ; sonra  
    echo $ CACERTS
else 
    echo 'Cacerts dosyası bulunamıyor.' > & 2 
    çıkış 1 fi 

Yalnızca Linux için. Solaris'imde okuma bağlantısı yok. Sonunda bu Perl-Script'i kullandım:

#! / usr / bin / env perl katı kullanın ; uyarıları kullanın ; Kullanım CWD qw ( realpath ); 
$ _ = Realpath (( grep {- X && - f } harita { "$ _ / keytool" } bölme ( ':' , $ ENV { YOL })) [ 0 ]); die "keytool bulunamıyor" sürece tanımlanan $ _ ; benim $ keytool = $ _ ; Yazdır


  
  

 "'$ Keytool' kullanılıyor. \ N" ; 
s / keytool $ / /;
$ _ = gerçek yol ($ _. '../ lib / security / cacerts ');
die -f $ _ olmadığı sürece "cacerts bulunamıyor";
$ cacerts = $ _;
print "' $ cacerts'a aktarılıyor . \ n";
`$ keytool -list -keystore" $ cacerts "-storepass changeit`;
die "anahtar kapsayıcısı okunamıyor" ise $? == 0;
$ ARGV [0] eq ' - d ' ise çıkış;
foreach (@ARGV) {
    $ sertifikam = $ _;
    s /\.[^.]+$//;
    $ diğer adım = $ _;
    " $ cert " ' $ alias ' olarak içe aktarılıyor \ n ";
    `keytool -importcert -file" $ cert "-alias" $ alias "-keystore" $ cacerts "-storepass changeit`;
    "Sertifika içe aktarılamıyor: $?" yoksa $? == 0;
}

6

DimtryB'nin bahsettiği gibi, anahtar deposu varsayılan olarak kullanıcı dizininin altındadır. Ancak cacerts, JVM'nin anahtarları seçebilmesi için cacertsdosyayı güncellemeye çalışıyorsanız, altındaki dosyayı güncellemeniz gerekecektir jre/lib/security. keytool -list -keystore cacertsSertifikanızın eklenip eklenmediğini görmek için komutu çalıştırarak da anahtarları görüntüleyebilirsiniz .


Keytool komutunun, lib/securityyalnızca göreli ad verilirse doğru yolu otomatik olarak eklediğini bilmek güzel .
ceving

1
Ancak bu işe yaramayacak -importcert. List komutu, sistem genelindeki sertifikaları gösterir, ancak içe aktarma komutu geçerli dizinde yeni bir dosya oluşturur.
ceving

1
updatedb; locate cacertscacerts dosyalarının kurulum konumlarının bulunmasına yardımcı olur.
sjas

5

Debian'da openjdk "1.8.0_212" sürümünü kullanarak burada cacerts buldum:

 /etc/ssl/certs/java/cacerts

Bu yolu yazdıracak standart bir komut olsaydı elbette kullanışlı olurdu.


2

Beni kullanmak için resmi OpenJDK 12 Docker görüntü Java keystore'da yeri oldu:

/usr/java/openjdk-12/lib/security/cacerts

Bu bir güven deposu, anahtar deposu değil.
Marquis of Lorne

2
İlk olarak: Soruyu dikkatlice okursanız (ve kendi yorumunuzu), daha çok bir sertifikanın içe aktarılması gereken bir Truststore gibi görünür. İkinci olarak, Truststore ve Keystore arasındaki fark oldukça kafa karıştırıcıdır ve her ikisi de biçimi kullandıkları için ikisi de "Anahtar Deposu" btw terimini kullanır. Üçüncüsü: İçe aktarma komutuna bakarsanız, keytool -import -file example.crt -alias exampleCA -keystore truststore.jksaynı zamanda parametreyi de kullanırsınız -keystore... oldukça belirsiz IMHO. Ve sonuncusu ama en az değil: Tam olarak bu sorunu araştırıyordum ve bu soruyu buldum. Belki diğerleri de aynı şeyi ifade eder.
jonashackt

Ayrıca, diğer tüm yanıtlar, JDK'nın doğrulamak için kullandığı "Truststore" adlı depoya da atıfta bulunur. Öyleyse, diğer tüm cevapları da reddettiniz mi? Zaten bir olumlu oy aldım, bu yüzden cevabımın yardım ettiği biri zaten var.
jonashackt

0

Bu sorunla, otomatik bir jre güncellemesinden sonra (neredeyse tamamen) kaldırılan bir jre dizininden çalışan bir Tomcat'te karşılaştık, böylece çalışan jre artık jre ... / lib / security / cacerts'ı bulamadı çünkü artık mevcut değil.

Tomcat'i yeniden başlatmak (yapılandırmayı farklı jre konumundan çalıştırmak için değiştirdikten sonra) sorunu çözdü.


0

Yukarıdaki tüm yanıtlara ek olarak:

JRE dizinindeki cacerts dosyasını güncellemek işe yaramazsa, dosyayı JDK'da güncellemeyi deneyin.

C: \ Program Dosyaları \ Java \ jdk1.8.0_192 \ jre \ lib \ security

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.