2016-10-07 2 views
1

현재 인증서 데이터와 외부 소프트웨어에서 생성 된 서명 된 데이터 만 사용하여 CMSSignedData을 생성하려고합니다. 따라서 개인 키와 개인 키에 액세스 할 필요가 없습니다. 서명 생성은 나를 위해 투명하다). 내가 필요한 것은 인코딩 된 데이터를 SMIME 서명 내용에 추가하는 것입니다.Java에서 개인 키가없는 CMSSignedData 생성

웹에서 검색 CMSSignedData을 얻으려면 서명 할 개인 키와 데이터를 사용하는 BouncyCastle으로 해결 방법을 찾습니다. 그러나 개인 키에 액세스 할 수 없기 때문에 내 문제가 해결되지 않으며 서명이 이미 생성되어 있습니다.

인증서 데이터, 공개 키 및 이전에 생성 된 서명 만 사용하여 CMS 개체를 만드는 방법이 있습니까?

내가 사용할 수 있거나 시도 할 수있는 접근 방법이나 라이브러리는 무엇입니까?

답변

0

CMS (암호화 메시지 구문)는 RFC 5652에 지정됩니다. 그래서

SignedData ::= SEQUENCE { 
    version CMSVersion, 
    digestAlgorithms DigestAlgorithmIdentifiers, 
    encapContentInfo EncapsulatedContentInfo, 
    certificates [0] IMPLICIT CertificateSet OPTIONAL, 
    crls [1] IMPLICIT RevocationInfoChoices OPTIONAL, 
    signerInfos SignerInfos } 

SignerInfo ::= SEQUENCE { 
    version CMSVersion, 
    sid SignerIdentifier, 
    digestAlgorithm DigestAlgorithmIdentifier, 
    signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, 
    signatureAlgorithm SignatureAlgorithmIdentifier, 
    signature SignatureValue, 
    unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL } 

다음 SignedData 유형은 기본적으로 서명 된 데이터 (된 encapContentInfo), 서명 된 인증서 (체인)로 구성된 ASN.1 구조 및 서명 자체 (signerInfos 부) 이제해야 할 일은 가지고있는 데이터에서 ASN.1 구조를 만드는 것입니다. 서명에 사용 된 알고리즘을 아직 모르는 경우 외부 서명 소프트웨어의 운영자로부터 해당 정보를 얻을 수 있습니다.

일반적으로 Bouncy Castle은 ASN.1 인코딩에 적합하며 일반적으로 CMSSignedData 개체 (CMSSignedDataGenerator)를 템플릿으로 사용하는 Bouncy Castle의 소스 코드를 사용할 수 있습니다.

+0

아주 좋은 접근 방법입니다. 나는 Bouncy Castle 클래스를 템플릿으로 사용하는 것에 대해 말한 것을하기 시작했지만 조금 어려웠습니다. 그렇다면 내가 원하는 것을 구현하는 [j4sign] (http://j4sign.sourceforge.net/)이라는 라이브러리를 발견했습니다 (Bouncy Castle을 사용함). – banshee20

+0

@ banshee20 예, BC는 사용하기가 쉽지 않습니다. ASN.1에 대한 경험이 거의 없으면 코드의 문서화가 잘되어 있지 않으며 읽기가 어렵습니다. 다른 한편, 포괄적이고, 잘 테스트되었으며, 당신이 어떻게 알고 있다면 거의 모든 것을 할 수 있습니다. 어쨌든 귀하의 문제에 대한 쉬운 해결책을 찾은 것을 기쁘게 생각합니다. – Omikron