java SSL ve cert anahtar deposu


165

Java programım sertifikayı içeren anahtar depomun nerede olduğunu nasıl bilebilir? Ya da alternatif olarak java programıma anahtar deposunu nerede arayacağımı nasıl söyleyebilirim?

Anahtar deposunu bir şekilde belirledikten sonra, sunucunun istemcide kimliğini doğrulamak için kullanılacak sertifikayı nasıl belirtebilirsiniz?


System.setProperty ayarının (aşağıdaki yaklaşımlar) kullanımından kaçınmak daha iyidir, bkz: docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/… , SSLContext için KeyManagerFactory nasıl oluşturulur
Marek- A-

Yanıtlar:


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

4
kimse nasıl bir windows kutusunda buna başvuru biliyor? System.setProperty ("javax.net.ssl.trustStore", "C: \\ Program Dosyaları (x86) \\ Java \\ jdk1.7.0_21 \\ jre \\ lib \\ güvenlik \\ cacerts"); benim için çalışmıyor :(
simgineer

4
Windows'ta, belirtilen yol adı eğik çizgiler yerine /, eğik çizgi kullanmalıdır \.
Droidman

Bu işe yaradı mı? 'Jks' dosyamın bir CA Sertifikası içerdiği yerde aynı kodu kullandım. Ama yine de javax.xml.ws.WebServiceException: org.apache.axis2.AxisFault: Aktarım hatası: 403 Hata: SOAP tarafından oluşturulan saplamalar yoluyla istemci kodu çağırdığımda yasak hata. Herhangi bir fikir?
james2611nov

1
Bir şifre sistemi özelliği de vardır (javax.net.ssl.trustStorePassword). JVM argümanları olarak da aktarılabilir -Djavax.net.ssl.trustStore = clientTrustStore.key -Djavax.net.ssl.trustStorePassword = customPassword Başvurusu customPassword Docs.oracle.com/javadb/10.8.3.0/adminguide/cadminsslclient.html
Kingsly

@ james2611nov: HTTPS uç noktasını çağıran bir HTTP 403 hatası (veya başka bir HTTP yanıtı) alıyorsanız, bu TLS kurulumunu başarıyla geçtiğiniz anlamına gelir: HTTP etkileşimleri yalnızca TLS kanalı kurulduktan sonra gerçekleşir ( aksi takdirde korunamazlar). Yani - evet, bu cevap sizin için işe yaradı. :-)
ruakh

295

SSL özellikleri, sistem özellikleri aracılığıyla JVM düzeyinde ayarlanır. Yani programı çalıştırdığınızda onları ayarlayabilirsiniz (java -D ....) Veya System.setProperty yaparak kodda ayarlayabilirsiniz.

Ayarlamanız gereken belirli tuşlar aşağıdadır:

javax.net.ssl.keyStore - Bir uygulama işleminin kendi sertifikasını ve özel anahtarını içeren Java anahtar deposu dosyasının konumu. Windows'ta, belirtilen yol adı ters eğik çizgiler yerine, / eğik çizgiler kullanmalıdır.

javax.net.ssl.keyStorePassword - javax.net.ssl.keyStore tarafından belirtilen anahtar deposu dosyasından özel anahtara erişmek için kullanılan parola. Bu şifre iki kez kullanılır: Anahtar deposu dosyasının kilidini açmak için (mağaza şifresi) ve Anahtar deposunda saklanan özel anahtarın şifresini çözmek için (anahtar şifresi).

javax.net.ssl.trustStore - Bu uygulama işleminin (güven deposu) güvendiği CA sertifikalarının toplanmasını içeren Java anahtar deposu dosyasının konumu. Windows'ta, belirtilen yol adı /ters eğik çizgiler yerine eğik çizgi kullanmalıdır.\ .

Bu özellik kullanılarak bir güven deposu konumu belirtilmezse, SunJSSE uygulaması aşağıdaki konumlarda (sırayla) bir anahtar deposu dosyası arar ve kullanır:

  1. $JAVA_HOME/lib/security/jssecacerts
  2. $JAVA_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword - Anahtar deposu dosyasının kilidini açmak için kullanılan parola (mağaza parolası) javax.net.ssl.trustStore.

javax.net.ssl.trustStoreType - (İsteğe bağlı) Java anahtar deposu dosya biçimi için bu özellik jks (veya JKS) değerine sahiptir. Varsayılan değeri zaten jks olduğu için normalde bu özelliği belirtmezsiniz.

javax.net.debug - SSL / TLS katmanı için günlüğe kaydetmeyi açmak için bu özelliği ssl olarak ayarlayın.


17
Bunun alıntılandığı belgeye bağlanmak daha uygun olacaktır. Sanırım bu: fusesource.com/docs/broker/5.3/security/SSL-SysProps.html
Bruno

4
Resmi belge JSSE Başvuru Kılavuzu olmalıdır: docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/…
aleung


11
Sistem güven deposunu düzenlemek isteyebilecek herkes için varsayılan şifre "changeit" şeklindedir: community.oracle.com/thread/1540678?start=0&tstart=0
cwc

Javax.net.ssl.trustStorePassword prop için +1. Bir süredir etrafa bakıyordum ve bundan bahseden ilk şey buydu.
jgreen

22

Sadece bir uyarı sözü. Java 9'da mevcut bir JKS anahtar deposunu açmaya çalışıyorsanız, aşağıdaki özellikleri "JKS" olarak da belirttiğinizden emin olmanız gerekir:

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

Java.security dosyasında belirtilen varsayılan anahtar deposu türünün Java 9'dan itibaren jks'ten pkcs12 olarak değiştirilmesinin nedeni.


11

Her şeyden önce, iki çeşit anahtar deposu var.

Bireysel ve Genel

Uygulama, başlangıçta belirtileni veya sistemin varsayılanını kullanır.

JRE veya JDK çalışıyorsa veya kişisel veya "global" olanı işaretlerseniz farklı bir klasör olacaktır.

Onlar da şifreli

Kısacası, yol şöyle olacaktır:

$JAVA_HOME/lib/security/cacerts Yetkililer için tüm CA'ya sahip olan ve oldukça önemli olan "genel" için.


Türler 'anahtar deposu' ve 'güven deposu'. Lütfen gereksiz terminoloji icat etmeyin.
Lorne Marquis

9

-Daşağıdaki gibi özellikleri kullanarak çalışma zamanında yoldan da bahsedebilirsiniz

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

Apache kıvılcım uygulamamda, --confseçeneği kullanarak ve extraJavaoptionsaşağıdaki gibi kıvılcım göndermede certs ve anahtar deposu yolunu sağlardım

--conf 'spark.driver.extraJavaOptions= 
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks' 
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.