2014-10-21 2 views
0

인증서를 읽고 그 결과로 usb 토큰에서 공개 키와 개인 키를 읽는 애플릿이 있습니다. 토큰을 연결할 때마다 PrivateKey에 대한 액세스 권한을 읽을 수 있지만 인증 및 키를 서블릿에 게시해야하는 암호화 된 환경이 있으며이 서블릿은 내 애플리케이션에서 선택한 파일에 서명합니다. 내보낼 수있는 PrivateKey가있는이 토큰을 얻을 때까지 제대로 작동했습니다.애플릿을 사용하여 토큰에서 개인 키 가져 오기

PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, PIN.toCharArray()); 

그런 다음 디코더를 사용하여 바이트 배열을 BASE64로 변환하고 게시합니다.

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder(); 
String base64encoded = encoder.encode(privateKey.getEncoded()); 

그러나,이 특정 토큰을 사용하여, 방법의 getEncoded(), privateKey.getEncoded (사용)는 항상 null를 돌려줍니다. 그래서 PrivateKey 객체에서 바이트 배열을 가져 오는 방법을 찾지 못했습니다.

가능한 방법이 있습니까?

답변

2

PKCS11 토큰에서 개인 키를 가져올 수 없으며 PKCS11은 보안 장치 내부에 키 재료를 포함하는데 사용되며 추출 할 수 없습니다.이 종류의 장치 (HSM, 스마트 - 카드 등) 서명은 내부에서 수행됩니다.

클라이언트 PKCS11 usb 토큰과 애플릿을 사용하여 서명을 수행하려면 서버 측에서 서명을 전달하는 대신 클라이언트 컴퓨터에서 실행되는 애플릿에서 서명을 수행해야합니다.이 옵션 그것은 불가능합니다.

호프가 도움이 되었으면

관련 문제