문제

나는 S/MIME으로 이메일에 서명하는 애플릿을 작성하려고 합니다.

당연히 필요한 것만 담은 작은 항아리 하나를 만들고 싶습니다.분명히 이를 수행하는 Java 방식에는 거대하고 신성한 서명된 Bouncy Castle JCE 병을 주변에 두는 것이 포함됩니다.

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

Sun의 승인 여부에 관계없이 순수 자바 오픈 소스 암호화 알고리즘이 작동하는 것을 막을 수 있는 것은 아무것도 없다는 것이 나에게는 분명합니다. 따라서 이는 이론적 가능성의 문제가 아니라 다음과 같습니다.어느 쪽이 가장 덜 고통스럽나요?

물론 Bouncy Castle 순수 Java JCE 구현을 가져와 해당 패키지의 이름을 java.security1로 변경하고 원하는 대로 변경하면 언제든지 초기에 추악한 작업을 수행할 수 있지만 현재로서는 이 방법이 너무 힘들어 보입니다.

업데이트 Bouncy Castle을 직접 사용할 때의 현재 문제는 다음과 같습니다.SecretKeyFactory를 사용하여 키 저장소에서 키를 로드하려고 시도했는데 결과적으로 Bouncy Castle 빌드가 거부되었습니다.

도움이 되었습니까?

해결책 2

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

나는 이걸했다:* JDKPKCS12KeyStore 클래스를 복사했습니다.* 어디에서나 BCProvider.getService ()로 보안을 대체했습니다. SPI-S (BC 소스에서)에서 보호 대신 필요한 방법을 공개적으로 공개했습니다.

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

다른 팁

BC S/MIME은 CMS 패키지를 통해 작성되므로 CMS 패키지를 수정하여 모든 암호화가 경량 클래스를 사용하여 수행되도록 하는 문제가 실제로 발생합니다.

유사한 작업이 이미 .NET 버전의 Bouncy Castle에 대해 성공적으로 수행되었습니다.우리는 CMS가 JCE나 경량 버전에서 작동할 수 있도록 Java 버전을 리팩토링하려고 노력하고 있습니다(느린 프로세스임은 인정합니다).동일한 문제가 BC API의 다른 부분에도 영향을 미칩니다.PKCS#12 키 저장소는 JCE 공급자에 내장되어 있고 OpenPGP 패키지는 JCE 등에 기록됩니다.이들의 .NET 포트는 이를 경량 API로 다시 작성했습니다.

귀하의 문제는 아마도 일반적인 경우보다 간단할 것입니다.아마도 CMSSignedDataGenerator 및 지원 클래스만 필요할 것입니다.addSigner 또는 generate의 수많은 변형이 모두 필요하지 않을 수도 있습니다.다이제스트/서명 알고리즘을 미리 결정하면 모든 공급자 항목을 특정 경량 구현에 대한 하드코딩된 호출로 쉽게 대체할 수 있습니다.

키 저장소 대신 PKCS#8 파일(PEM 인코딩)에 단일 개인 키를 저장하면 됩니다.인증서도 마찬가지입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top