У меня есть функции iText7, которые я использую,
прямо сейчас я пытаюсь зашифровать свой PDF-файл, используя сертификат в формате .pfx с паролем.
Дело в том, что функция не может прочитать .pfx, потому что она не предоставляет пароль, как показано ниже.
using System.IO;
using iText.Kernel.Pdf;
using Org.BouncyCastle.X509;
namespace iText.Samples.Sandbox.Security
{
public class EncryptWithCertificate
{
public static readonly String DEST = "results/sandbox/security/encrypt_with_certificate.pdf";
public static readonly String SRC = "../../../resources/pdfs/hello.pdf";
public static readonly String PUBLIC = "../../../resources/encryption/test.cer";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new EncryptWithCertificate().ManipulatePdf(DEST);
}
public X509Certificate GetPublicCertificate(String path)
{
using (FileStream stream = File.Open(path, FileMode.Open))
{
X509CertificateParser parser = new X509CertificateParser();
X509Certificate readCertificate = parser.ReadCertificate(stream);
return readCertificate;
}
}
protected void ManipulatePdf(String dest)
{
// The file created by this example can not be opened, unless
// you import the private key stored in test.p12 in your certificate store.
// The password for the p12 file is kspass.
X509Certificate cert = GetPublicCertificate(PUBLIC);
PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
new WriterProperties().SetPublicKeyEncryption(
new[] {cert},
new[] {EncryptionConstants.ALLOW_PRINTING},
EncryptionConstants.ENCRYPTION_AES_256)));
document.Close();
}
}
}
Если я попытаюсь загрузить обычный файл .cer, он пройдет нормально для GetPublicCertificate
. Нет проблем. Но я пытаюсь зашифровать его с помощью файла .pfx, поскольку Adobe Acrobat может регистрировать цифровой идентификатор только в формате .p12/.pkf, и функция выдает ошибку.
Ошибка
Org.BouncyCastle.Security.Certificates.CertificateException
HResult=0x80131500
Message=Failed to read certificate
Inner Exception 1:
ArgumentException: Unknown object in GetInstance: Org.BouncyCastle.Asn1.DerInteger
Parameter name: obj
Я надеюсь зашифровать PDF-файл с помощью сертификата, поскольку срок действия сертификата может быть установлен в любое время в соответствии с тем, что я установил, и пользователь может просматривать файл PDF только на основе истечения срока действия сертификата.
Заранее спасибо.