Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > работа с KeyStore


Автор: powerOn 21.4.2006, 22:10
Привет всем!
Есть след. код, в котором я программно пытаюсь сгенерировать секретный ключ, а потом сохранить в KeyStore:

Код

package testkeystore;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.security.*;
import java.security.cert.CertificateFactory;
import java.util.Enumeration;
import javax.crypto.KeyGenerator;
import java.security.cert.*;
import javax.crypto.SecretKey;

public class Main {

    public Main() {
    }
    public static void main(String[] args) {
        try {
 // Загружаем KeyStore. Нет проблем.
            java.security.KeyStore ks = java.security.KeyStore.getInstance(KeyStore.getDefaultType());
            FileInputStream fis = new FileInputStream("ClientKeyStore");
            ks.load( fis, "clientpassword".toCharArray());
            fis.close();
 // Генерируем секретный ключ для DES алгоритма. Нет проблем.           
            KeyGenerator kg = KeyGenerator.getInstance("DES");
            SecretKey kp = kg.generateKey();
            
            KeyStore.SecretKeyEntry myEntry = new KeyStore.SecretKeyEntry(kp);
            KeyStore.ProtectionParameter password =
                    new KeyStore.PasswordProtection("clientkeypassword".toCharArray());
// Пытаемся сохранить ключ, не выходит :-(
             ks.setEntry("secretKeyAlias", myEntry, password);

//          store away the keystore
            java.io.FileOutputStream fos = new java.io.FileOutputStream("newKeyStoreName.txt");
            ks.store(fos, "clientpassword".toCharArray());
            fos.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
    }
    
}


С генерацией ключей нет проблем, но вот с сохранением имеются. Код сохранения я по аналогии с Sun-ским примером делаю, вот ссылка: http://java.sun.com/j2se/1.5.0/docs/api/java/security/KeyStore.html
Но к сожаления получаю исключение при выполнении этой строки:

Код

 ks.setEntry("secretKeyAlias", myEntry, password);


Код

java.security.KeyStoreException: Cannot store non-PrivateKeys
        at sun.security.provider.JavaKeyStore.engineSetKeyEntry(Unknown Source)
        at java.security.KeyStoreSpi.engineSetEntry(Unknown Source)
        at java.security.KeyStore.setEntry(Unknown Source)
        at testkeystore.Main.main(Main.java:53)


Понять не могу, почему ключ секретный сохранять ни хочет. Спасайте... 

Автор: jimur 21.4.2006, 23:05
а ты не пробовал использовать мировую базу знаний?  smile 
http://www.google.ru/search?hl=ru&q=%22Cannot+store+non-PrivateKeys%22&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=
там по первой ссылке дельное решение предлагают - попробуй 

Автор: powerOn 21.4.2006, 23:26

jimur, спасибо, истина всегда где-то рядом и обычно ближе чем кажется...  smile 

меняем тип хранилища, и все работает... 
java.security.KeyStore ks = java.security.KeyStore.getInstance("JCEKS");

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)