Java Cryptography - Anahtarları saklama
Kullanılan / üretilen anahtarlar ve sertifikalar, anahtar deposu adı verilen bir veri tabanında saklanır. Varsayılan olarak bu veritabanı,.keystore.
Bu veritabanının içeriğine, KeyStore sınıfı java.securitypaketi. Bu, PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry olmak üzere üç farklı girişi yönetir.
- PrivateKeyEntry
- SecretKeyEntry
- TrustedCertificateEntry
Anahtar deposunda bir Anahtar saklama
Bu bölümde, bir anahtar deposunda bir anahtarın nasıl saklanacağını öğreneceğiz. Anahtar deposunda bir anahtar saklamak için aşağıda verilen adımları izleyin.
1. Adım: Bir KeyStore nesnesi oluşturun
getInstance() yöntemi KeyStore sınıfı java.security paket, anahtar deposu türünü temsil eden bir dize değerini kabul eder ve bir KeyStore nesnesi döndürür.
Kullanarak KeyStore sınıfının bir nesnesini oluşturun. getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
2. Adım: KeyStore nesnesini yükleyin
load() KeyStore sınıfının yöntemi, anahtar deposu dosyasını temsil eden bir FileInputStream nesnesini ve KeyStore şifresini belirten bir String parametresini kabul eder.
Genel olarak, Anahtar Deposu adlı dosyada saklanır cacerts, konumda C:/Program Files/Java/jre1.8.0_101/lib/security/ ve varsayılan şifresi changeit, kullanarak yükleyin load() yöntemi aşağıda gösterildiği gibi.
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
3. Adım: KeyStore.ProtectionParameter nesnesini oluşturun
KeyStore.ProtectionParameter'i aşağıda gösterildiği gibi örnekleyin.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Adım 4: Bir SecretKey nesnesi oluşturun
Oluştur SecretKey (arabirim) nesnesi, Sub sınıfını başlatarak SecretKeySpec. Örnek oluştururken, aşağıda gösterildiği gibi kurucusuna parametre olarak şifre ve algoritma geçirmeniz gerekir.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Adım 5: Bir SecretKeyEntry nesnesi oluşturun
Bir nesneyi oluşturun SecretKeyEntry sınıfı geçerek SecretKey yukarıdaki adımda oluşturulan nesne aşağıda gösterildiği gibi.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
6. Adım: KeyStore'a bir giriş ayarlayın
setEntry() yöntemi KeyStore sınıfı, anahtar deposu giriş diğer adını temsil eden bir String parametresi kabul eder, bir SecretKeyEntry nesne, bir ProtectionParameter nesnesi ve girişi verilen diğer ad altında depolar.
Girişi kullanarak anahtar deposu için ayarlayın. setEntry() yöntemi aşağıda gösterildiği gibi.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Example
Aşağıdaki örnek, anahtarları "cacerts" dosyasında (Windows 10 işletim sistemi) bulunan anahtar deposunda saklar.
import java.io.FileInputStream;
import java.security.KeyStore;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class StoringIntoKeyStore{
public static void main(String args[]) throws Exception {
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
//Storing the KeyStore object
java.io.FileOutputStream fos = null;
fos = new java.io.FileOutputStream("newKeyStoreName");
keyStore.store(fos, password);
System.out.println("data stored");
}
}
Output
Yukarıdaki program aşağıdaki çıktıyı üretir -
System.out.println("data stored");