KeyStoreSpi
KeyStoreSpi (키 저장소 SPI)
KeyStore 클래스의 Service Provider Interface(SPI)를 정의하는 클래스입니다. 특정 키스토어 타입의 구현을 제공하려는 암호화 서비스 프로바이더는 이 클래스의 모든 추상 메서드를 구현해야 합니다.
본문
KeyStoreSpi는 키스토어의 내부 엔진(engine) 역할을 수행하며, 실제 KeyStore 객체의 공개 메서드는 이 SPI의 engine* 메서드들을 호출합니다. 프로바이더가 구현해야 하는 주요 추상 메서드는 다음과 같습니다.
public abstract Key engineGetKey(String alias, char[] password)— 주어진 비밀번호로 키를 복구해 alias와 연관된 키를 반환합니다. 비밀번호가 틀리면UnrecoverableKeyException(또는NoSuchAlgorithmException)이 발생할 수 있습니다.public abstract Certificate[] engineGetCertificateChain(String alias)— alias와 연관된 인증서 체인을 반환합니다. 없으면null을 반환합니다.public abstract Certificate engineGetCertificate(String alias)— alias와 연관된 인증서를 반환합니다.public abstract Date engineGetCreationDate(String alias)— 주어진 alias로 식별되는 엔트리의 생성 일자를 반환합니다.public abstract void engineSetKeyEntry(String alias, Key key, char[] password, Certificate[] chain)— 주어진 키를 비밀번호로 보호해 alias에 할당합니다.PrivateKey라면 대응하는 공개 키를 증명하는 인증서 체인이 필요합니다.public abstract void engineSetKeyEntry(String alias, byte[] key, Certificate[] chain)— 이미 보호된 키를 alias에 할당합니다.public abstract void engineSetCertificateEntry(String alias, Certificate cert)— 주어진 인증서를 alias에 할당합니다.public abstract void engineDeleteEntry(String alias)— 이 키스토어에서 주어진 alias의 엔트리를 삭제합니다.public abstract Enumeration<String> engineAliases()— 키스토어의 모든 alias 이름을 나열합니다.public abstract boolean engineContainsAlias(String alias)— 주어진 alias가 존재하는지 확인합니다.public abstract int engineSize()— 키스토어의 엔트리 수를 가져옵니다.public abstract boolean engineIsKeyEntry(String alias)— 해당 엔트리가 키 관련 엔트리인지 여부를 반환합니다.public abstract boolean engineIsCertificateEntry(String alias)— 해당 엔트리가 신뢰된 인증서 엔트리인지 여부를 반환합니다.public abstract void engineStore(OutputStream stream, char[] password)— 키스토어를 주어진 출력 스트림에 저장하고 비밀번호로 무결성을 보호합니다.public abstract void engineLoad(InputStream stream, char[] password)— 주어진 입력 스트림에서 키스토어를 로드합니다. 비밀번호를 주면 키스토어를 잠금 해제하거나 무결성을 검사합니다.
이 밖에도 engineGetEntry, engineSetEntry, engineEntryInstanceOf, engineProbe 같은 엔트리·프로브 관련 메서드가 있습니다. 키스토어에 속성을 지원하는 구현은 engineGetAttributes(String alias)를 오버라이드할 수 있습니다.
데이터 무결성에 사용하는 알고리즘을 찾을 수 없으면 NoSuchAlgorithmException이, 데이터를 저장·로드하는 데 실패하면 IOException이 발생할 수 있습니다.