私は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に署名することを管理します。
同じことをする方法を教えてもらえますか?
よろしく
*常に*秘密鍵があります。秘密鍵なしでデジタル署名を作成することはできません。したがって、現在のPDFライブラリが秘密鍵なしでPDFに署名することを管理しているとの主張は間違っています。たぶんあなたは本当の**デジタル署名**(PKIを意味する)について話しているわけではありません。おそらく、非公開鍵が使用されていることに気づいていない可能性があります(PKCS#12と書かれていますが、ライブラリでPKCS#11を使用しているなど)。 –
.Netセキュリティライブラリでは、クラスとメソッドの名前が使用されることがありますが、実際には証明書に加えて(オプションとして)一致する秘密キーが存在するのに対し、証明書のみを意味するようです。例えば。 [X509Certificate2](https://msdn.microsoft.com/en-us/library/windows/desktop/system.security.cryptography.x509certificates.x509certificate2(v = vs.100).aspx)を参照してください。 – mkl
以下のプロパティが設定されている場合、PDFAアーカイブを実行すると、ライブラリは自動的にPDFに署名します。 _conversion.CertificateName = _signature.CertificatDelivreA; _conversion.Issuer = _signature.CertificatDelivrePar; Windows証明書ストアに格納されている証明書を使用し、証明書に秘密キーが組み込まれていません(私のexempleのcert [0] .HasPrivateKeyはfalseです)。 私はどのように署名が適用されているのかわかりませんが、Adobe Readerはその署名を検証できないことを明確に示しています。 – PatriceVB