Bagaimana cara mengetahui keystore yang digunakan JVM saya?


125

Saya perlu mengimpor sertifikat ke keystore JVM saya. Saya menggunakan yang berikut ini:

keytool -import -alias daldap -file somecert.cer

jadi saya mungkin perlu mengubah panggilan saya menjadi sesuatu seperti:

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

1
Anda perlu mengimpor sertifikat ke truststore JVM Anda , kecuali jika itu CSR yang ditandatangani, dalam hal ini Anda harus mengimpornya ke keystore Anda sendiri , dan Anda harus sudah tahu di mana itu, jika tidak, Anda tidak akan dapat menghasilkan keypair atau CSR.
Marquis of Lorne

Jawaban:


129

Keystore Anda akan berada di Anda JAVA_HOME---> JRE -->lib---> security--> cacerts. Anda perlu memeriksa di mana JAVA_HOME Anda dikonfigurasi, mungkin salah satu dari tempat-tempat ini,

  1. Komputer ---> Tingkat Lanjut -> Variabel lingkungan ---> JAVA_HOME

  2. File batch startup server Anda.

Dalam cacerts perintah -keystore impor Anda (berikan path lengkap ke JRE di atas, bukan hanya mengatakan cacerts).


6
/ Library / Java / Home / lib / keamanan / cacerts di Mac OS X 10.9
Sam Barnum

9
* "JAVA_HOME ---> JRE -> lib ---> security -> cacerts" Catat "s" di bagian akhir, hanya untuk pembaca yang akan datang.
Keir Nellyer

4
Jadi jika saya menginstal versi Java yang baru, dan JAVA_HOME menunjuk ke direktori baru, apakah saya akan mengalami masalah sertifikat?
Kirill Yunussov

1
@Murphy: Ini mungkin membantu Anda stackoverflow.com/questions/5251323/...
kosa

4
ini adalah lokasi toko kepercayaan daripada lokasi toko kunci saya pikir.
user2001850

35

Lokasi Keystore

Setiap perintah keytool memiliki -keystoreopsi untuk menentukan nama dan lokasi file keystore persisten untuk keystore yang dikelola oleh keytool. Keystore secara default disimpan dalam file yang bernama .keystoredi direktori home pengguna, sebagaimana ditentukan oleh properti sistem "user.home". Diberikan nama pengguna uName, nilai properti "user.home" default ke

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

Jadi, jika nama pengguna adalah "cathy", "user.home" default ke

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


Saya telah mencari ~/.keystorefile misteri ini ! Jika saya mengabaikan -keystoreparameter, saya tidak tahu keytoolpenargetan default keystore mana . Saya terus mencari cacertstempat lain di mesin. Saya tidak berharap keytool untuk menghasilkan ~/.keystoredi direktori home, juga untuk itu diberi nama .keystorebukan cacerts. Anda telah mengisi kolom yang harus didokumentasikan oleh orang-orang Jawa! Terima kasih!
George Pantazes

26

Mac OS X 10.12 dengan Java 1.8:

$ JAVA_HOME / jre / lib / security

cd $JAVA_HOME

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

Dari situ ada di:

./jre/lib/security

Saya memiliki cysterts keystore di sana.

Untuk menentukan ini sebagai opsi VM:

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

Saya tidak mengatakan ini adalah cara yang benar (Mengapa java tidak tahu untuk melihat ke dalam JAVA_HOME?), Tetapi ini adalah apa yang harus saya lakukan untuk membuatnya bekerja.


16

Anda dapat menemukannya di direktori "Beranda" Anda:

Di Windows 7:

C:\Users\<YOUR_ACCOUNT>\.keystore

Di Linux (Ubuntu):

/home/<YOUR_ACCOUNT>/.keystore

4
saya tidak memiliki direktori ini di windows
simgineer

1
Saya melakukan -keygen tanpa menentukan keystore, mengharapkannya untuk membuat satu di direktori saat ini, tetapi ia menciptakannya di rumah saya seperti yang Anda katakan. ~ / .keystore Tidak bisa menemukannya sejak lama! :-) Terima kasih.
Eurospoofer

izinkan saya menambahkan bahwa di bawah cygwin path windows digunakan karena properti java user.homesama dengan $HOMEDRIVE$HOMEPATHset by windows dan tidak di $HOMEset oleh cygwin mana HOMEDRIVE=C:danHOMEPATH=\Users\[YOUR ACCOUNT]
user1708042

13

Ini bekerja untuk saya:

#! / bin / bash

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

jika keytool - list - keystore $ CACERTS - storepass changeit > / dev / null ; kemudian  
    echo $ CACERTS
lain 
    gema 'Tidak dapat menemukan file cacerts.' > & 2 
    keluar 1 fi 

Hanya untuk Linux. Solaris saya tidak memiliki tautan baca. Pada akhirnya saya menggunakan Perl-Script ini:

#! / usr / bin / env perl gunakan secara ketat ; gunakan peringatan ; penggunaan CWD qw ( realpath ); 
$ _ = realpath (( grep {- x && - f } map { "$ _ / keytool" } split ( ':' , $ ENV { PATH })) [ 0 ]); mati "Tidak dapat menemukan keytool" kecuali ditentukan $ _ ; $ keytool saya = $ _ ; mencetak


  
  

 "Menggunakan '$ keytool'. \ N" ; 
s / keytool $ / /;
$ _ = realpath ($ _. '../ lib / security / cacerts ');
mati "Tidak dapat menemukan cacerts" kecuali -f $ _;
$ cacerts saya = $ _;
cetak "Mengimpor ke ' $ cacerts '. \ n";
`$ keytool -list -keystore" $ cacerts "-storepass changeit`;
mati "Tidak bisa membaca wadah kunci" kecuali $? == 0;
keluar jika $ ARGV [0] eq ' - d ';
foreach (@ARGV) {
    $ cert saya = $ _;
    s /\.[^.[+$//;
    $ alias saya $ $;
    cetak "Mengimpor ' $ cert ' sebagai ' $ alias '. \ n";
    `keytool -importcert -file" $ cert "-alias" $ alias "-keystore" $ cacerts "-storepass changeit`;
    peringatan "Tidak dapat mengimpor sertifikat: $?" kecuali $? == 0;
}

6

Seperti yang DimtryB sebutkan, secara default keystore berada di bawah direktori pengguna. Tetapi jika Anda mencoba memperbarui cacertsfile, sehingga JVM dapat memilih kunci, maka Anda harus memperbarui cacertsfile di bawah jre/lib/security. Anda juga dapat melihat kunci dengan menjalankan perintah keytool -list -keystore cacertsuntuk melihat apakah sertifikat Anda ditambahkan.


Senang mengetahui bahwa perintah keytool menambahkan lib/securityjalur yang benar secara otomatis jika hanya diberi nama relatif.
ceving

1
Tetapi ini tidak akan berhasil -importcert. Perintah daftar menunjukkan sertifikat lebar sistem tetapi perintah impor menghasilkan file baru di direktori saat ini.
ceving

1
updatedb; locate cacertsmembantu menemukan di mana lokasi pemasangan file arsip.
sjas

5

Di Debian, menggunakan versi openjdk "1.8.0_212", saya menemukan cacerts di sini:

 /etc/ssl/certs/java/cacerts

Tentu akan berguna jika ada perintah standar yang akan mencetak jalur ini.


1

Bagi saya menggunakan gambar OpenJDK 12 Docker resmi , lokasi keystore Java adalah:

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

Itu truststore, bukan keystore.
Marquis of Lorne

1
Pertama: Jika Anda membaca pertanyaan dengan hati-hati (dan komentar Anda sendiri), itu terdengar lebih seperti Truststore, di mana sertifikat harus diimpor. Kedua, perbedaan antara Truststore dan Keystore cukup membingungkan - dan keduanya menggunakan istilah "Keystore" btw, karena mereka menggunakan format keduanya. Ketiga: Jika Anda melihat perintah impor keytool -import -file example.crt -alias exampleCA -keystore truststore.jksAnda juga menggunakan parameter -keystore... IMHO cukup jelas. Dan yang tak kalah pentingnya: Saya mencari tentang masalah yang sebenarnya - dan menemukan pertanyaan yang begitu. Mungkin orang lain mengharapkan hal yang sama.
Jonashackt

Selanjutnya semua jawaban lain juga merujuk pada apa yang disebut "Truststore" yang digunakan JDK untuk memvalidasi. Jadi, apakah Anda juga menurunkan semua jawaban lainnya? Saya sudah menerima upvote, jadi sudah ada seseorang yang jawaban saya membantu.
Jonashackt

0

Kami mengalami masalah ini pada Tomcat yang berjalan dari direktori jre yang (hampir sepenuhnya) dihapus setelah pembaruan jre otomatis, sehingga jre yang berjalan tidak lagi dapat menemukan jre ... / lib / security / cacerts karena sudah tidak ada lagi.

Restart Tomcat (setelah mengubah konfigurasi agar berjalan dari lokasi jre yang berbeda) memperbaiki masalahnya.


0

Selain semua jawaban di atas:

Jika memperbarui file cacerts di direktori JRE tidak membantu, coba perbarui di JDK.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.