2010-02-08 2 views
2

S/MIME을 사용하여 전자 메일을 서명하는 애플릿을 작성하려고합니다.JCE가없는 자바의 S/MIME

분명히 필요한 물건만으로 하나의 작은 항아리를 만들고 싶습니다. 분명히 Java 수행 방법은 거대한 성스러운 Bouncy Castle JCE jar를 서명하는 것입니다.

질문 : 무엇 JCE 닿지는 "인증", "제공"에 대해 불평하지 않고 S/MIME을 얻는 가장 쉬운 방법? 어쩌면 JCE에 의존하지 않는 S/MIME 구현이있을 수 있습니까? 어쩌면 JCE를 건드리지 않고 가벼운 API를 사용하여 Bouncy Castle S/MIME을 사용할 수 있습니까? 어쩌면 다른 방법이 있을까요?

썬의 승인 여부와 관계없이 순수 자바 오픈 소스 암호 알고리즘이 작동하지 못하게하는 것은 아무것도 없으므로 이론적 가능성의 문제가 아니라 오히려 어떤 방식 으로든 가장 고통스럽지 않습니다.

물론 Bouncy Castle pure-java JCE 구현을 가져 와서 패키지를 java.security1로 이름을 바꾸고 내가 원하는대로 변경할 수 있으므로 일찍 추악해질 수 있습니다. 그러나이 방법은 현재 너무 어려워 보입니다.

UPDATE 직접 탄력이 성을 사용하여 나의 현재의 문제 : 나는 다시 내 탄력이 성이 건설 거부의 SecretKeyFactory를 사용하는 것 스토어에서 키를로드하려고합니다.

답변

1

JCE를 사용하지 않고 메시지에 서명하는 것은 매우 간단합니다. 실제 문제는 PKCS # 12 키를 읽는 것이 었습니다. * 복사 JDKPKCS12KeyStore 클래스 이상 :

나는 이런 짓을. * 모든 지역 거기에 필요한 방법을 공개하는 대신 보호했다 bcProvider.getService와 Security.getInstance() (SPI-S를 반환)(). newInstance와() 그 SPI는-S (BC 소스에서)에서 *를 교체했다.

해킹처럼 보이지만 실제로 작동하는 것처럼 보입니다.

2

BC S/MIME은 CMS 패키지를 통해 기록, 그래서 질문은 정말 모든 암호는 경량 클래스를 사용하여 수행하도록 CMS 패키지를 수정에 양도한다. 유사한

뭔가 탄력이 성의 .NET 버전, 더 또는 덜 성공적으로 이미 완료되었습니다. 우리는 CMS 버전이 JCE 또는 경량 버전에서 작동 할 수 있도록 Java 버전을 리팩토링하는 데는 (느린 프로세스 임) 시도하고 있습니다. 동일한 문제가 BC API의 다른 부분에도 영향을줍니다. PKCS # 12 키 스토어는 JCE 프로 바이더에 짜 넣어지고 OpenPGP 패키지는 JCE 등에 쓰여진다. 이것들의 닷넷 포트는 경량 API에도 재 기입된다.

문제는 일반적인 경우보다 간단합니다. 아마도 CMSSignedDataGenerator와 지원 클래스 만 있으면됩니다. 아마도 addSigner 또는 변형의 무수한 변형을 모두 필요로하지 않을 것입니다. 만약 당신이 당신의 다이제스트/시그너처 알고리즘을 정면으로 결정했다면, 모든 프로 바이더는 특정 경량 구현에 대한 하드 코드 된 호출로 대체하기 쉽습니다. 대신 키 스토어의

는, 어쩌면 당신은 단지 PKCS # 8 파일에 하나의 개인 키 (PEM 아마도 인코딩) 저장 멀리 얻을 수 있습니다. 인증서의 경우도 마찬가지입니다.

+0

예, JCE를 사용하지 않고도 메시지에 쉽게 서명 할 수 있습니다. 실제 문제는 PKCS # 12 키를 읽는 것이 었습니다. 거기에 설명되어 있습니다. – alamar