나는 자바 키 스토어와 keytool에 대해 다음 질문을 가지고있다. 키 스토어에는 1 개 이상의 인증서가있을 수 있다고 가정합니다. 내가 시도한 것처럼 keytool을 통해 키 저장소를 만들 수 있으며이 키 저장소에 액세스하려면 암호를 설정해야합니다. 또한 각 인증서 항목에 액세스하려면 암호를 설정해야합니다. 키 저장소와 항목에 대해 동일한 암호를 반드시 입력해야합니까? 그렇지 않다면 (왜 그렇게 생각하는 것이 합리적이라고 생각합니다) 다음 코드는 무엇입니까?자바 키 스토어와 패스워드 설정
char[] pwd = new char[]{'s','e','c','r','e','t'};
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream("myPersonal.keystore"), pwd);
kmf.init(ks, pwd);//fails here with exception
다음 예외는 무엇입니까?
Exception in thread "main" java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(Unknown Source)
at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(Unknown Source)
secret
myPersonal.keystore
에 액세스 할 수있는 암호입니다. 인증서에는 인증서 2 개, DSA 1 개, RSA 1 개가 있습니다. 각각은 키 스토어 (그리고 서로)와 다른 암호를 가지고 있습니다. 열쇠 스토어와 같은 패스워드를 가지는 단일의 증명서 엔트리로 키 스토어를 사용하면 (자), 예외는없고 프로그램도 정상적으로 동작하기 때문에, 코드는 정확합니다.
그래서 여기에 무슨 문제가 있습니까? 다른 암호가 없어야합니까? 나는 많은 인증서가 없어야합니까? 또는 무엇을?
KeyManagerFactory에서이 제한을 강제하는 이유가 있습니까? 실제 시나리오에서는 일반적으로 다른 암호를 사용하는 것으로 가정합니다. – Cratylus
KeyManagerFactory의 API 정의에 대해서는 암시 적입니다. . 나는 API가 가장 단순한 시나리오를 다루기 위해 만들어 졌다고 가정 할 것이다. 즉, 모든 키는 동일한 패스워드를 가질 것이다. KeyManagerFactory는보다 일반적인 접근법 (내가 검증하지 않은 것)을 다루는 간단한 메커니즘입니다. KeyStore API를 사용하면 다른 암호로 다른 키에 액세스 할 수 있으므로 더 복잡한 시나리오의 기능을 확장 할 수 있습니다. API 정의 뒤에있는 추론에 관해서는 말하기 어렵습니다. –
그것은 작동합니다. 도움을 감사하십시오! – Bai