2016-10-09 4 views
0

누구든지 프로젝트에 참여하는 동안 키 저장소를 어디에 두어야하는지 내게 알려 주거나 알려주십시오.적절한 저장 비밀 키

나는 자바가 & cancerts들이 비밀 키의 키 - 값 쌍을 제공 한 키 스토어에 trutstore &입니다 보안]/cancerts에서 키 저장소를 유지 알고있다.

이제 키 스토어에 키 - 값 쌍이있는 비밀 키가 저장되어있는 사용자 정의 키 저장소를 저장하고 싶습니다. 저장 위치는 어디입니까?

.keystore 파일을 프로젝트 자체에 포함하고 있습니다. 또는 다른 위치 ??

그렇다면 해당 키 저장소에 인증서를 할당해야합니까? 내가 어떻게 실용적으로 할 수 있니? 아래

프로젝트 자체 test.keystore을 생성 된 코드 ...

public static void main(String[] args) throws Exception { 

    String fileWithKeyStore = "test.keystore"; 
    KeyStore keyStore = JKSTest.createKeyStore(fileWithKeyStore, "pwdForKeyStoreFile"); 

    storeKeyInKeyStore(keyStore, fileWithKeyStore); 
    // retriveKeyFromKeyStore(keyStore); 

} 

public static void storeKeyInKeyStore(KeyStore keyStore, String fileWithKeyStore) throws Exception { 

    System.out.println(keyStore.getType()); // JCEKS 

    /** Storing in key value format like map but with password */ 
    SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey(); // JWT-Key 

    keyStore.setEntry("map_key", new KeyStore.SecretKeyEntry(secretKey), 
      new PasswordProtection("pwdForMapEntry".toCharArray())); 

    keyStore.store(new FileOutputStream(fileWithKeyStore), "pwdForStoringFile".toCharArray()); 
    System.out.println("Stored Key:\t" + secretKey); 

} 

public static void retriveKeyFromKeyStore(KeyStore keyStore) 
     throws NoSuchAlgorithmException, UnrecoverableEntryException, KeyStoreException { 

    KeyStore.Entry entry = keyStore.getEntry("map_key", new PasswordProtection("pwdForMapEntry".toCharArray())); 
    SecretKey keyFound = ((KeyStore.SecretKeyEntry) entry).getSecretKey(); 
    System.out.println("Found Key:\t" + keyFound); 

} 


public static KeyStore createKeyStore(String fileName, String pw) throws Exception { 
    File file = new File(fileName); 

    final KeyStore keyStore = KeyStore.getInstance("JCEKS"); 
    if (file.exists()) { 
     // .keystore file already exists => load it 
     keyStore.load(new FileInputStream(file), pw.toCharArray()); 
     System.out.println("Existing .keystore file loaded!"+file.getAbsolutePath()); 
    } else { 
     // .keystore file not created yet => create it 
     keyStore.load(null, null); 
     keyStore.store(new FileOutputStream(fileName), pw.toCharArray()); 
     System.out.println("New .keystore file created!"); 
    } 

    return keyStore; 
} 

답변

0

는 구체적으로, 당신은 당신의 개인 키를 저장하는 위치 또는 키 스토어를 찾고있다?

두 경우 모두 저장할 위치는 홈 폴더 여야합니다 (기본적으로 개인 키는 ~/.ssh/* nix 시스템에 만들어집니다). 개인 키/키 저장소에는 사용자 (저장소 소유자) 만 액세스 할 수있는 제한적인 사용 권한이 있어야합니다 (On * nix 시스템에서는 사용 권한 0400으로 변환해야 함).

+0

감사합니다. Mahesh ... System.getProperty ("user.home") right ?? 그냥 맨 위로 .. 리눅스 시스템이나 Windows 시스템이이 줄에 영향을 미치지 않을까 ... 바로 ??? 나는 홈 디렉토리에 파일을 넣을 때 OS에 대해 신경 쓸 필요가 없다는 것을 의미한다 ..... – ashishl

+0

짧은 대답, 네. – Mahesh

+0

감사합니다. Mahesh ..... :) – ashishl