Безопасность и подписи

Безопасность и подписи

Безопасность и подписи

Aspose.PDF FOSS for .NET поддерживает цифровые подписи PDF, шифрование на основе сертификатов и пользовательские обработчики безопасности. Используйте PdfSigner для рабочих процессов подписи и PdfCertificate для управления сертификатами.


Подписание документа

PdfSigner применяет цифровую подпись к PDF, используя сертификат PFX.

var cert = PdfCertificate.FromPfx("certificate.pfx", "password");
var signer = new PdfSigner();
signer.Sign(doc, cert);
doc.Save("signed.pdf");

Проверка подписей

var signer = new PdfSigner();
bool valid = signer.Verify(doc);
Console.WriteLine($"Signature valid: {valid}");

Подписание с визуальным отображением

signer.SignWithAppearance(doc, cert, signatureField, appearance);

Управление сертификатами

PdfCertificate загружает сертификаты из файлов PFX или файлов, закодированных в DER.

// From PFX
var cert = PdfCertificate.FromPfx("cert.pfx", "password");

// From DER files (certificate + key)
var cert2 = PdfCertificate.FromDerFiles("cert.der", "key.der");

Шифрование на основе сертификата

CertificateEncryptionOptions шифрует PDF так, чтобы только указанные держатели сертификата могли открыть его.

var options = new CertificateEncryptionOptions(cert);

Пользовательские обработчики безопасности

Реализуйте ICustomSecurityHandler для пользовательской логики шифрования и дешифрования.

public class MyHandler : ICustomSecurityHandler
{
    public void Initialize(EncryptionParameters parameters) { }
    public byte[] CalculateEncryptionKey() { /* ... */ return Array.Empty<byte>(); }
    public byte[] GetUserKey() { /* ... */ return Array.Empty<byte>(); }
    public byte[] GetOwnerKey() { /* ... */ return Array.Empty<byte>(); }
    public bool IsOwnerPassword(string password) { /* ... */ return false; }
    public bool IsUserPassword(string password) { /* ... */ return false; }
}

Информация об алгоритме подписи

SignatureAlgorithmInfo описывает алгоритм, используемый в существующей подписи.

var info = new SignatureAlgorithmInfo("SHA256withRSA");
Console.WriteLine(info.ToString());

Советы и лучшие практики

  • Всегда подписывайте документы на последнем этапе — любое изменение после подписи делает подпись недействительной.
  • Используйте файлы PFX с надёжными паролями для хранения сертификатов.
  • Проверяйте подписи после загрузки документа, чтобы обнаружить подделку.
  • Шифрование на основе сертификатов требует публичного ключевого сертификата получателя.
  • Реализуйте ICustomSecurityHandler только когда стандартное шифрование недостаточно.

Распространённые проблемы

IssueCauseFix
Подпись отображается как недействительнаяДокумент изменён после подписиПодпишите заново после завершения всех изменений
Не удалось загрузить PFXНеправильный пароль или повреждённый файлПроверьте пароль и целостность файла
Шифрование препятствует открытиюНе указан пароль владельцаИспользуйте правильный пароль владельца или пользователя

Часто задаваемые вопросы

Какие алгоритмы подписи поддерживаются?

RSA с SHA-256, SHA-384 и SHA-512 обычно поддерживается. Доступные алгоритмы зависят от типа ключа сертификата.

Могу ли я добавить несколько подписей?

Да. Каждая подпись применяется к отдельному полю подписи в документе.

Требуется ли коммерческий сертификат для подписи?

Нет. Самоподписанные сертификаты работают для тестирования. Для продакшна используйте сертификат от доверенного CA.


Сводка справки API

Class / MethodDescription
PdfSignerПодписывать и проверять PDF‑документы
PdfSigner.SignПрименять цифровую подпись
PdfSigner.VerifyПроверять действительность подписи
PdfSigner.SignWithAppearanceПодписывать с визуальным полем подписи
PdfCertificateЗагрузчик сертификатов для форматов PFX и DER
PdfCertificate.FromPfxЗагрузка из файла PFX с паролем
PdfCertificate.FromDerFilesЗагрузка из файлов, закодированных в DER
CertificateEncryptionOptionsШифрование PDF на основе сертификата
ICustomSecurityHandlerИнтерфейс для пользовательского шифрования/расшифровки
EncryptionParametersПараметры, передаваемые пользовательским обработчикам безопасности
SignatureAlgorithmInfoМетаданные о алгоритме подписи

См. также

 Русский