2012-04-16 3 views
2

리소스로 war 파일에서로드하는 JCEKS 키 저장소가 있습니다. 키 스토어를 사용하여 AES 암호화 용 비밀 키를 저장하고 있습니다. 키 저장소는 파일을 직접 여는 통조림 프로젝트에서 읽을 때 잘 작동합니다. 이 날 내가 사용하고 암호가 잘못이라고 생각한다 조금 인터넷 검색을 수행 한 후JCEKS 키 스토어가 리소스로 사용되었습니다.

java.io.IOException: Keystore was tampered with, or password was incorrect 
    at com.sun.crypto.provider.JceKeyStore.engineLoad(DashoA13*..) 
    at java.security.KeyStore.load(KeyStore.java:1185) 

하지만 검증 한 후 그들은 바로 것을 : 나는 자원으로 키 스토어에 액세스 할 때, 그러나, 나는 다음과 같은 예외를 얻고있다 오류가 계속 발생합니다. 다음은 키 저장소 데이터에서로드하려고 시도하는 위치입니다.

public class AegisDataStoreFactory { 
    ... 
    static { 
     InputStream in = null; 
     try{ 
      final Configuration conf = Configuration.getConfiguration(); 
      final KeyStore ks = KeyStore.getInstance("JCEKS"); 
      in = AegisDataStoreFactory.class.getResourceAsStream(KEYSTORE); 
      final String password = conf.getProp("keyStorePassword").trim(); 
      ks.load(in, password.toCharArray()); 
      ... 
     } finally { 
      if(in != null) { 
       in.close(); 
      } 
     } 
    } 
    ... 
} 

로드시 IOException으로 프로그램이 실패합니다. 나는 여기서 상실하고있다. 그것은 전쟁에서 그것을로드하지 않을 때 잘 작동합니다. Maven을 사용하여 war 파일을 생성합니다.

의견이 있으십니까?

편집 : 나는 무슨 일이 일어나고 있는지 알아 냈습니다. 빌드 할 때 Maven을 사용하고 리소스 파일을 필터링 할 수 있도록 빌드하는 동안 Maven을 사용합니다. 이 시점까지 필자는 리소스 디렉토리에 바이너리 파일이 없었습니다 (필자가 필터링을 원했던 속성 파일 만있었습니다). 필터링에서 키 스토어를 제외했지만 키 스토어가 이동되었는지 확인한 후에도 키 스토어가 작동했습니다.

+0

키 저장소 비밀번호가 올바른지 (keytool, openssl) 어떻게 확인 했습니까? 디버그하고 코드의 암호 문자열이 실제로 있어야한다고 생각하는 코드인지 확인 했습니까? – bobz32

+0

예 keytool을 사용하고 Eclipse에서 독립 실행 형 Java 프로젝트를 만드는 것으로 키 스토어를로드 할 수있었습니다. – PatTheGamer

+0

질문에 대한 답변으로 솔루션을 작성하고 올바른 답변으로 표시해야합니다. 명성에 보너스를 얻지는 않습니다 (누군가 투표하지 않는 한). 그러나 다른 사람들이 대답을 발견 할 수있게합니다. –

답변

1

나는 무슨 일이 일어나고 있는지 알아 냈습니다. 빌드 할 때 Maven을 사용하고 리소스 파일을 필터링 할 수 있도록 빌드하는 동안 Maven을 사용합니다. 이 시점까지 필자는 리소스 디렉토리에 바이너리 파일이 없었습니다 (필자가 필터링을 원했던 속성 파일 만있었습니다). 필터링에서 키 스토어를 제외했지만 키 스토어가 이동되었는지 확인한 후에도 키 스토어가 작동했습니다. 다음은 내 초기 pom 파일입니다.

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
    </resource> 
</resources> 

다음은 pom 파일을 업데이트 한 내용입니다. (내 키 스토어의 파일 확장명은 .ks 임)

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     <excludes> 
      <exclude>**/*.ks</exclude> 
     </excludes> 
    </resource> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>false</filtering> 
     <includes> 
      <include>**/*.ks</include> 
     </includes> 
    </resource> 
</resources> 
관련 문제