Безопасность и подписи
Безопасность и подписи
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только когда стандартное шифрование недостаточно.
Распространённые проблемы
| Issue | Cause | Fix |
|---|---|---|
| Подпись отображается как недействительная | Документ изменён после подписи | Подпишите заново после завершения всех изменений |
| Не удалось загрузить PFX | Неправильный пароль или повреждённый файл | Проверьте пароль и целостность файла |
| Шифрование препятствует открытию | Не указан пароль владельца | Используйте правильный пароль владельца или пользователя |
Часто задаваемые вопросы
Какие алгоритмы подписи поддерживаются?
RSA с SHA-256, SHA-384 и SHA-512 обычно поддерживается. Доступные алгоритмы зависят от типа ключа сертификата.
Могу ли я добавить несколько подписей?
Да. Каждая подпись применяется к отдельному полю подписи в документе.
Требуется ли коммерческий сертификат для подписи?
Нет. Самоподписанные сертификаты работают для тестирования. Для продакшна используйте сертификат от доверенного CA.
Сводка справки API
| Class / Method | Description |
|---|---|
PdfSigner | Подписывать и проверять PDF‑документы |
PdfSigner.Sign | Применять цифровую подпись |
PdfSigner.Verify | Проверять действительность подписи |
PdfSigner.SignWithAppearance | Подписывать с визуальным полем подписи |
PdfCertificate | Загрузчик сертификатов для форматов PFX и DER |
PdfCertificate.FromPfx | Загрузка из файла PFX с паролем |
PdfCertificate.FromDerFiles | Загрузка из файлов, закодированных в DER |
CertificateEncryptionOptions | Шифрование PDF на основе сертификата |
ICustomSecurityHandler | Интерфейс для пользовательского шифрования/расшифровки |
EncryptionParameters | Параметры, передаваемые пользовательским обработчикам безопасности |
SignatureAlgorithmInfo | Метаданные о алгоритме подписи |