리소스로 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을 사용합니다. 이 시점까지 필자는 리소스 디렉토리에 바이너리 파일이 없었습니다 (필자가 필터링을 원했던 속성 파일 만있었습니다). 필터링에서 키 스토어를 제외했지만 키 스토어가 이동되었는지 확인한 후에도 키 스토어가 작동했습니다.
키 저장소 비밀번호가 올바른지 (keytool, openssl) 어떻게 확인 했습니까? 디버그하고 코드의 암호 문자열이 실제로 있어야한다고 생각하는 코드인지 확인 했습니까? – bobz32
예 keytool을 사용하고 Eclipse에서 독립 실행 형 Java 프로젝트를 만드는 것으로 키 스토어를로드 할 수있었습니다. – PatTheGamer
질문에 대한 답변으로 솔루션을 작성하고 올바른 답변으로 표시해야합니다. 명성에 보너스를 얻지는 않습니다 (누군가 투표하지 않는 한). 그러나 다른 사람들이 대답을 발견 할 수있게합니다. –