2017-12-15 45 views
1

pdf-boxライブラリ(v2.0.8)を使用して、pdfドキュメントにデジタル署名を追加しようとしています。私はすでに署名されたコンテンツをWebサービスから受信しています(秘密鍵のみで署名されています)。今私はPDF文書に追加できるように、この署名されたデータに証明書情報を関連付ける必要があります。できれば弾力のあるキャッスルAPIを使用して、既に署名されたコンテンツに証明書を追加するにはどうすればよいですか?すでに署名されたデータに証明書情報を関連付けるにはどうすればよいですか?

// here content is data which has to be signed 
public byte[] sign(InputStream content) throws IOException { 
     try { 
      CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); 
      List<Certificate> certList = new ArrayList<Certificate>(); 
      certList.add(certificate); 
      Store certs = new JcaCertStore(certList); 
      gen.addCertificates(certs); 

      CMSProcessableInputStream msg = new CMSProcessableInputStream(signPrivate(content)); 
      CMSSignedData signedData = gen.generate(msg, false); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      DEROutputStream dos = new DEROutputStream(baos); 
      dos.writeObject(signedData.toASN1Structure()); 
      return baos.toByteArray(); 
     } catch (Exception e) { 
      throw new IOException(e); 
     } 
    } 

ここではデジタル署名を生成できますが、証明書情報は含まれていません。私はすでにthisthisの質問をチェックしていますが、コンテンツはすでに秘密鍵を使ってseperatlyで署名されており、証明書のみを関連付ける必要があります。

+1

すべてのCMSシグネチャプロファイルで真剣に取り組むには、問題の証明書*が必要です。*署名は、署名された証明書への参照として作成されます。 – mkl

+0

@mkl、後で証明書を関連付けることはできず、秘密鍵でコンテンツに署名するときにのみ行うことができますか? –

答えて

1

(あなたが投稿したコードは、CMS署名コンテナを指し、私たちはおよそ PDF署名をETSI.CAdES.detachedかをadbe.pkcs7.detached。話していると仮定)

で署名を作成するときに署名値が実際に文書データのハッシュにのみ署名するか、いわゆる符号付き属性SignerInfo仕様のsignedAttrs)のコレクションに署名するかどうかの選択肢があり、ドキュメントデータは、それらの属性の1つの値です。

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

RFC 5652 section 5.3. SignerInfo Type

本契約真剣に取られるすべてのプロファイルを、しかし、あなたは特に、彼らはESS署名証明書(RFC 2634 section 5.4)またはESSを使用する必要が、署名の属性を使用する必要がsigning-certificate-v2(RFC 5035 section 3)署名者証明書を参照する署名付き属性。

したがって、署名の署名証明書との関連付けは、の前に固定され、の署名値が生成されます。

したがって、署名証明書を既に生成された署名に自由に関連付けることはできません。

関連する問題