Truststore ve Keystore Tanımları


Yanıtlar:


268

Bir anahtar deposu özel anahtarlar ve karşılık gelen ortak anahtarları olan sertifikaları içerir.

Bir truststore, iletişim kurmayı beklediğiniz diğer taraflardan veya diğer tarafları tanımlamak için güvendiğiniz Sertifika Yetkililerinden sertifikalar içerir.


12
Her ne kadar bu pratikte doğru olsa da, aynı şey olabilirler (ve çoğu zaman). Özel bir anahtarı ve genel sertifikayı [java home] / jre / lib / security / cacerts varsayılan "truststore" a aktarabilirsiniz. Keytool yardımcı programı, yalnızca mağaza türlerinde (yani - JKS ve PKCS12) iki terimde bir ayrım yapmaz. Bu nedenle, Java aynı şeyi kaynak kodunda yapar. Bir java.security.KeyStore oluşturursunuz ve içindeki sertifikaları yönetmek için bir güven yöneticisi kullanırsınız, ancak TrustStore sınıfı yoktur.

4
Java TrustStore kendi başına değildir . Ya da java belgelerinde bulamadım (örneğin, java.security.TrustStore). Bir Sertifika Yetkilisine güvenmek istediğimizde, sertifikaya bir KeyStore(ve aracılığıyla KeyStoregeçirilir TrustManagerFactory) aracılığıyla güvenilir .
jww

5
Bu söz etmek gerekiyor KeyStore.load(InputStream is, char[] password)( docs ) boş parola alabilir ve daha sonra kamu sertifika erişimi verecektir. Yani, bir truststore'a göz atmak isteyen kodun şifreyi bilmesine gerek yoktur (çok iyi nedenlerle!)
x

83
  1. Bir anahtar deposu özel anahtarlar içerir. Buna yalnızca bir sunucuysanız veya sunucu istemci kimlik doğrulaması gerektiriyorsa ihtiyacınız vardır.

  2. Bir truststore güvenilecek CA sertifikaları içerir. Sunucunuzun sertifikası tanınan bir CA tarafından imzalanmışsa, JRE ile birlikte gelen varsayılan güven deposu zaten ona güvenir (çünkü zaten güvenilir CA'lara güveniyordur), bu yüzden kendinizinkini oluşturmanıza veya birine bir şey eklemenize gerek yoktur JRE'den.

Kaynak


73

SSL el sıkışmasında trustStore'un amacı kimlik bilgilerini doğrulamak ve keyStore'un amacı kimlik bilgileri sağlamaktır .

anahtar deposu

Java'daki keyStore, ortak anahtarlarına karşılık gelen özel anahtarı ve sertifikaları depolar ve SSL Server veya SSL olup olmadığınızı gerektirir, istemci kimlik doğrulaması gerektirir.

truststore

TrustStore, üçüncü tarafın sertifikalarını saklar, Java uygulamanızla iletişim kurar veya CA tarafından imzalanmış sertifikalar (Verisign, Thawte, Geotrust veya GoDaddy gibi sertifika yetkilileri).

TrustManager

TrustManager, uzak bağlantıya güvenilip güvenilmeyeceğini belirler; yani uzak tarafın iddia ettiği kişi olup olmadığı ve KeyManager, SSL el sıkışma sırasında kimlik doğrulama için uzaktaki ana bilgisayara hangi kimlik doğrulama bilgilerinin gönderilmesi gerektiğine karar verir.

SSL Sunucusu iseniz, anahtar değişimi algoritması sırasında özel anahtarı kullanır ve genel anahtarlarınıza karşılık gelen sertifikaları istemciye gönderirsiniz, bu sertifika keyStore'dan alınır. SSL istemci tarafında, Java ile yazılmışsa, Server'ın kimliğini doğrulamak için trustStore'da saklanan sertifikaları kullanır. SSL sertifikaları en sık olarak gelir olan .cer herhangi bir tuşa yönetim programı örn kullanarak anahtar deposu veya truststore içine eklenir dosyanın keytool .

Kaynak: http://javarevisited.blogspot.ch


31

Ayrıca, standart JSSE belgelerinin bir parçası olarak Sun'ın yazımıyla da ilgilenebilirsiniz:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

Güven deposu, genellikle X.509 kimlik doğrulaması gibi doğrulama amacıyla yalnızca ortak anahtarları depolamak için kullanılır. Yönetilebilirlik amacıyla, yöneticilerin veya geliştiricilerin ikisini tek bir mağazada sınırlamaları oldukça yaygındır.


1
Ne yazık ki bir 404 verir
Chris Beach

@ChrisBeach - Oracle sitesindeki doğru bağlantıyı güncelledik.
Peter Mularien

1
Güven deposu, güvenilir imzalayan sertifikaları
Lorne

9

Java'da bir anahtar deposu ve bir güven deposu arasındaki fark nedir?

Java Güvenli Yuva Uzantısı (JSSE) Başvuru Kılavuzu'ndaki Java belgelerinin açıklaması aşağıdadır . Sana başkalarının söylediklerinden farklı bir şey söylediğini sanmıyorum. Ancak resmi referans sağlar.

deposu / truststore

Bir anahtar deposu, anahtar materyalin bir veritabanıdır. Anahtar malzeme, kimlik doğrulama ve veri bütünlüğü de dahil olmak üzere çeşitli amaçlar için kullanılır. PKCS12 ve Oracle'ın JKS'i gibi çeşitli anahtar deposu türleri mevcuttur.

Genel olarak, anahtar deposu bilgileri iki kategoriye ayrılabilir: anahtar girişleri ve güvenilir sertifika girişleri. Anahtar girişi, bir kuruluşun kimliğinden ve özel anahtarından oluşur ve çeşitli kriptografik amaçlar için kullanılabilir. Buna karşılık, güvenilir bir sertifika girişi, varlığın kimliğine ek olarak yalnızca ortak bir anahtar içerir. Bu nedenle, javax.net.ssl.KeyManager gibi özel bir anahtarın gerekli olduğu durumlarda güvenilir bir sertifika girişi kullanılamaz. JKS'nin JDK uygulamasında, bir anahtar deposu hem anahtar girişlerini hem de güvenilir sertifika girişlerini içerebilir.

Bir truststore, neye güveneceğiniz konusunda karar verirken kullanılan bir anahtar deposudur. Zaten güvendiğiniz bir varlıktan veri alırsanız ve varlığın iddia ettiği varlık olduğunu doğrularsanız, verilerin gerçekten o varlıktan geldiğini varsayabilirsiniz.

Yalnızca kullanıcı o varlığa güvenirse, bir güven mağazasına bir giriş eklenmelidir. Bir anahtar çifti oluşturarak veya bir sertifikayı içe aktararak, kullanıcı bu girdiye güven verir. Güven mağazasındaki herhangi bir giriş güvenilir bir giriş olarak kabul edilir.

İki farklı anahtar deposu dosyası olması yararlı olabilir: biri yalnızca anahtar girişlerinizi içerir, diğeri ise CA sertifikaları dahil olmak üzere güvenilir sertifika girişlerinizi içerir. Birincisi özel bilgiler içerirken ikincisi içermez. Tek bir anahtar deposu dosyası yerine iki dosya kullanmak, kendi sertifikalarınız (ve karşılık gelen özel anahtarlar) ile diğerlerinin sertifikaları arasındaki mantıksal ayrımın daha net bir şekilde ayrılmasını sağlar. Özel anahtarlarınız için daha fazla koruma sağlamak üzere, bunları sınırlı erişime sahip bir anahtar deposunda saklayın ve gerekirse güvenilir sertifikaları daha halka açık bir anahtar deposunda sağlayın.


4
  1. TrustStore ve keyStore arasındaki ilk ve en büyük fark, trustStore'un TrustManager tarafından uzak bağlantıya güvenilip güvenilmeyeceğini belirlemek için kullanılmasıdır, keyStore, SSL tokalaşması sırasında kimlik doğrulama için hangi kimlik doğrulama bilgilerinin uzak ana bilgisayara gönderilmesi gerektiğine karar vermek için KeyManager'dan kullanılır.

  2. Diğer bir fark, keyStore'un teorik olarak yalnızca SSL bağlantısında bir Sunucu çalıştırıyorsanız veya sunucu tarafında ve diğer yandan trustStore'un ortak anahtarı veya CA (Sertifika Yetkilileri) uzak tarafa veya SSL bağlantısına güven.

    Aslında böylece bu dosyayı yönetmek için bir araç (keytool) aynı olduğu göz önüne alındığında, aynı dosyada hem özel hem kamu anahtarları saklayabileceğiniz sen olabilir her iki amaç için tek bir dosya kullanmak, ancak muhtemelen olmamalı .

  3. En azından Mac OSX'imde varsayılan keyStore ${user.home}/.keystoreve varsayılan trustStore /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.

    Bunları geçersiz kılmak istiyorsanız, JVM parametrelerini -Djavax.net.ssl.keyStore /path/to/keyStoreveya -Djavax.net.ssl.trustStore /path/to/trustStore. Ayrıca söz konusu anahtar deposu parolası ayarlamak gerekebilir java.security.UnrecoverableKeyException: Password must not be nullparametresini kullanarak, -Djavax.net.ssl.trustStorePassword=passwordya da-Djavax.net.ssl.trustStorePassword=password

Ana kaynak:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

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.