2017-01-04 12 views
0

私はiText7を評価しており、秘密鍵を持たない自己署名入りの証明書でpdfに署名することはできません。秘密鍵なしでiText7で署名する

 X509Store store = new X509Store(StoreLocation.CurrentUser); 

     store.Open(OpenFlags.ReadOnly); 
     var certs = store.Certificates.Find(X509FindType.FindBySubjectName, "MyName", false); 
     var refDate = DateTime.MinValue; 
     X509Certificate2 certificate = certs[0]; 

     var pk = DotNetUtilities.GetKeyPair(certificate.PrivateKey).Private; //how to do without private key ???? 

     IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256"); 
     var bCert = DotNetUtilities.FromX509Certificate(certificate); 
     var chain = new Org.BouncyCastle.X509.X509Certificate[] {bCert}; 
     using (var reader = new PdfReader(@"D:\Test\ToSign.pdf")) 
     using (var stream = new FileStream(@"D:\Test\Signed.pdf", FileMode.OpenOrCreate)) { 
      PdfSigner signer = new PdfSigner(reader, stream, false); 
      signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS); 
     } 

は私がしているPDFに署名したが、私たちの現在のPDFライブラリ者識別するために、必ずできるようにするには、秘密鍵を使用する必要があることを理解しています:私はこれをやろうとしている

COMコンポーネントは、秘密鍵なしでpdfに署名することを管理します。

同じことをする方法を教えてもらえますか?

よろしく

+3

*常に*秘密鍵があります。秘密鍵なしでデジタル署名を作成することはできません。したがって、現在のPDFライブラリが秘密鍵なしでPDFに署名することを管理しているとの主張は間違っています。たぶんあなたは本当の**デジタル署名**(PKIを意味する)について話しているわけではありません。おそらく、非公開鍵が使用されていることに気づいていない可能性があります(PKCS#12と書かれていますが、ライブラリでPKCS#11を使用しているなど)。 –

+0

.Netセキュリティライブラリでは、クラスとメソッドの名前が使用されることがありますが、実際には証明書に加えて(オプションとして)一致する秘密キーが存在するのに対し、証明書のみを意味するようです。例えば。 [X509Certificate2](https://msdn.microsoft.com/en-us/library/windows/desktop/system.security.cryptography.x509certificates.x509certificate2(v = vs.100).aspx)を参照してください。 – mkl

+0

以下のプロパティが設定されている場合、PDFAアーカイブを実行すると、ライブラリは自動的にPDFに署名します。 _conversion.CertificateName = _signature.CertificatDelivreA; _conversion.Issuer = _signature.CertificatDelivrePar; Windows証明書ストアに格納されている証明書を使用し、証明書に秘密キーが組み込まれていません(私のexempleのcert [0] .HasPrivateKeyはfalseです)。 私はどのように署名が適用されているのかわかりませんが、Adobe Readerはその署名を検証できないことを明確に示しています。 – PatriceVB

答えて

1

他の人がコメントで述べたように:(あなたが持っていないかもしれません)秘密鍵は常にある公開鍵がある場合。

しかし、COMコンポーネントが署名プロセスに公開鍵を使用している可能性があります。非対称暗号化では、あなたが公開鍵で暗号化し、秘密鍵で復号化することができるパブリック(PDFの署名に使用されるデジタル署名と呼ばれる)キーまたは

    • 秘密鍵で暗号化および復号化でき(PGPで使用される暗号化と呼ばれます)。

    ので、多分、このコンポーネントは、署名のために公開鍵(代わりに秘密鍵)を使用しているが、公開鍵が添付されたPDF署名(normaly)であるため、あなたがその文書を確認することができないです述べたように署名に。いずれかのPDFリーダ/ライブラリがドキュメントを取得した場合、ドキュメントの検証中にエラーが発生します。

    iTextでその動作を "エミュレート"するには、証明書から公開鍵を取り出して秘密鍵に変換し、署名に使用することができます。 しかし、これは意味をなさないで、おそらく検証できない壊れたPDFファイルを作成します。だから私はそれに対してアドバイスを...

  • +1

    * "このコンポーネントは署名に"公開鍵(代わりに秘密鍵)を使用しているかもしれませんが、 "それは意味をなさないでしょうか?公開鍵は証明書の一部であるため、証明書を持っている人はそれを偽造することができます。 – mkl

    +0

    *「しかしこれは意味をなさない」*私の投稿を引用するために;-) – Lonzak

    +0

    エーム、はい。 ;)[私のコメントでは、iText関連の部分ではなく一般的な部分だけを見ていたので、大胆なことを見落とした...] – mkl

    関連する問題