Введение

PDF‑файлы являются неотъемлемой частью различных отраслей, а обеспечение их подлинности и целостности с помощью цифровых подписей — важная мера безопасности. Цифровые подписи предоставляют юридическую силу и защищают документы от подделки. Это подробное руководство проведёт вас через процесс реализации .NET PDF‑подписания, создавая безопасный сервис цифровой подписи PDF с использованием Azure Key Vault и GroupDocs.Signature for .NET.

Электронные подписи документов становятся всё более важными для компаний, переходящих к безбумажным рабочим процессам. GroupDocs.Signature for .NET предлагает мощное решение C# для цифровой подписи PDF, отвечающее требованиям соответствия цифровой подписи в различных нормативных рамках. Независимо от того, новичок ли вы в PDF‑подписании в .NET‑приложениях или хотите улучшить существующую реализацию, в этом учебнике изложено всё необходимое.

Azure Key Vault — облачный сервис управления ключами, позволяющий безопасно хранить и управлять криптографическими ключами и сертификатами. GroupDocs.Signature for .NET — мощный, безопасный API для подписания PDF, позволяющий разработчикам программно применять цифровые подписи к PDF‑файлам. Интегрируя эти технологии, вы можете построить надёжный и эффективный сервис цифровой подписи PDF.

Одной из самых мощных функций, которую мы рассмотрим, является подпись пользовательского хеша, предоставляющая исключительную гибкость для вашего рабочего процесса подписания. Этот подход позволяет подключать внешние устройства подписания, такие как аппаратные модули безопасности (HSM), смарт‑карты или любые другие криптографические устройства, к вашему приложению. С помощью пользовательской подписи хеша разработчики могут писать собственные сервисы подписания, взаимодействующие с проприетарными системами, наследуемой инфраструктурой или специализированным оборудованием, сохраняя совместимость с фреймворком GroupDocs.Signature. Это делает решение идеальным для организаций с особыми требованиями к безопасности или уже имеющими инвестиции в криптографическую инфраструктуру.

🔐 Создание Azure Key Vault и сертификата

Начнём с настройки Azure Key Vault и создания сертификата.

Шаг 1: Создание Key Vault

Создайте новый ресурс Azure Key Vault через Azure portal. Подробные инструкции см. в этом quick‑start guide.

💡Если у вас нет активной подписки Azure, вы можете зарегистрироваться на бесплатный пробный период на 1 месяц, чтобы начать работу.

Шаг 2: Генерация или импорт сертификата

После того как ваш Key Vault будет готов, перейдите в его панель, выберите вкладку Certificates и нажмите Generate/Import, чтобы добавить сертификат.

Azure Key Vault interface for creating digital signature certificates for PDF signing

Шаг 3: В поле Method of Certificate Creation выберите Generate, чтобы автоматически создать новый сертификат. В этом примере мы выбираем Self‑signed certificate в качестве типа удостоверяющего центра.

Complete workflow diagram of GroupDocs .NET PDF digital signature process with Azure Key Vault

Примечание: Если вы предпочитаете использовать существующий сертификат, выберите Import, чтобы загрузить его с локального устройства.

C# code example of custom hash signing implementation with GroupDocs.Signature

Шаг 4: Затем перейдите в Advanced Policy Configuration и установите параметр Private Key Export в No.

Azure certificate signing process diagram showing the data flow between components

Шаг 5: Нажмите Create. Сертификат будет добавлен в ваш Key Vault.

Чтобы просмотреть его детали, просто кликните по сертификату, чтобы открыть свойства.

PDF signature validation example in .NET application showing verification results

⚙️ Регистрация приложения для доступа к Azure Key Vault

Чтобы Web API мог получить доступ к Azure Key Vault, его необходимо зарегистрировать в Azure Active Directory:

Шаг 1: Перейдите в Azure Active Directory, выберите App registrations и нажмите New registration.

Electronic document signatures integration between Azure Key Vault and GroupDocs

Шаг 2: Введите название вашего приложения и завершите регистрацию.

Secure PDF signing API configuration screen with security settings

После регистрации вы получите ключевые данные — скопируйте Client ID и Tenant ID для использования в приложении.

Azure Key Vault access policy setup interface for digital signature permissions

Шаг 3: Затем выберите API Permissions в боковом меню и нажмите Add Permission. Выберите Azure Key Vault, укажите Full Access и завершите процесс, нажав Add Permissions.

.NET PDF signing output example showing a successfully signed document

Шаг 4: Выберите Certificate & secrets и нажмите New client secret, чтобы создать новый секретный ключ. Скопируйте этот ключ для доступа из вашего .NET‑приложения.

External signing device integration diagram for GroupDocs custom hash implementation

🔐 Назначение политики доступа к Azure Key Vault

На предыдущих шагах мы создали и зарегистрировали приложение. Теперь необходимо предоставить только что зарегистрированному приложению доступ к Azure Key Vault:

Шаг 1: Перейдите в Azure Key Vault, выберите Access Policies и нажмите Create.

Digital signature compliance settings configuration for regulatory requirements

Шаг 2: Выберите необходимые разрешения и нажмите Next.

Azure Active Directory application registration for PDF signing services

Шаг 3: В открывшемся окне выберите приложение, которое мы регистрировали ранее, GroupDocs.Signature.Service, и нажмите Create.

Custom sign services architecture diagram showing component relationships
GroupDocs Signature appearance settings panel for visual signature customization

Приложение появится в разделе Access Policies.

PDF digital signature verification process showing validation workflow steps

📑 Как использовать Azure Key Vault с GroupDocs.Signature for .NET при подписании PDF

Это подробное руководство объясняет, как подписывать PDF‑документы с помощью API GroupDocs.Signature в .NET, используя пользовательскую подпись хеша, которая опирается на Azure Key Vault. Мы разобьём процесс на чёткие шаги — от настройки среды C# до реализации собственного подписывающего хеш, отвечающего требованиям соответствия цифровой подписи.

Обзор безопасного подписания PDF с пользовательской реализацией хеша

Подход с пользовательской подписью хеша предоставляет исключительную гибкость для внедрения электронных подписей в ваших .NET‑приложениях. Мы рассмотрим:

  • Настройку .NET‑приложения для работы с GroupDocs.Signature при цифровой подписи PDF
  • Конфигурацию профессиональных параметров цифровой подписи с правильным управлением сертификатами
  • Реализацию механизма пользовательской подписи хеша для максимальной гибкости
  • Интеграцию Azure Key Vault для безопасного получения публичного сертификата и подписи документа
  • Соблюдение лучших практик безопасности на протяжении всей реализации

Для дополнительного контекста см. документацию GroupDocs.Signature о цифровой подписи с пользовательским хешем.

🚀 Преимущества пользовательской подписи хеша для .NET PDF‑приложений

Прежде чем перейти к реализации, важно понять, почему пользовательская подпись хеша представляет собой значительный прорыв в технологии цифровой подписи:

  1. Интеграция с внешними устройствами подписания: пользовательская подпись хеша обеспечивает бесшовное подключение к HSM, смарт‑картам, биометрическим устройствам и другому специализированному криптографическому оборудованию, которое уже используется в вашей организации.
  2. Гибкая архитектура для корпоративных решений: организации могут писать собственные сервисы подписания, взаимодействующие с существующей инфраструктурой, наследуемыми системами или проприетарными решениями, сохраняя совместимость с GroupDocs.Signature.
  3. Повышенная безопасность и соответствие требованиям: разделяя генерацию хеша и процесс фактической подписи, вы получаете более строгий контроль над криптографическими операциями, что помогает удовлетворять строгие нормативные требования, такие как eIDAS, ESIGN Act и отраслевые стандарты.
  4. Поддержка облачного управления ключами: интеграция с Azure Key Vault позволяет хранить и управлять сертификатами в сертифицированной облачной инфраструктуре Microsoft, а не на локальных машинах.
  5. Настройка процесса подписи: реализуйте пользовательские рабочие процессы одобрения, последовательности многопользовательского подписания или специальные правила валидации, выходящие за рамки стандартных реализаций цифровой подписи.

Шаг 1. Настройка среды C# для цифровой подписи PDF

Начните с определения путей к файлам и инициализации объекта GroupDocs.Signature в вашем C#‑приложении. В этом примере указываются исходный PDF‑файл и место сохранения подписанного документа.

public static void SignDocument()  
{  
    // Define paths for the source and output documents  
    string sampleFilePath = "sample.pdf";  
    string sampleOutputFilePath = "signed.pdf";

    using (Signature signature = new Signature(sampleFilePath))  
    {  
        // Code continues in the next steps...  
    }  
}

📌Annotation:

Этот шаг создаёт новый экземпляр Signature, который загружает PDF‑документ, подлежащий подписанию, закладывая основу для безопасного PDF‑подписания в вашем .NET‑приложении.


Шаг 2. Конфигурация параметров цифровой подписи

Далее задаём параметры цифровой подписи. Они включают детали сертификата, визуальное оформление и алгоритм хеширования. Пользовательская подпись хеша будет подключена позже.

// Initialize digital signing options  
DigitalSignOptions options = new DigitalSignOptions()  
{  
    Signature = new DigitalSignature(),  
    Password = "1234567890",      // Certificate password  
    Reason = "Sign",              // Signing reason  
    Contact = "JohnSmith",        // Contact information  
    Location = "Office1",         // Signing location  
    AllPages = true,              // Apply signature on all pages  
    Width = 80,  
    Height = 60,  
    VerticalAlignment = VerticalAlignment.Bottom,  
    HorizontalAlignment = HorizontalAlignment.Right,  
    Margin = new Padding() { Bottom = 10, Right = 10 },  
    HashAlgorithm = HashAlgorithm.Sha256 // Specify SHA-256 for hashing  
};

📌Annotation:

Настройте базовые свойства цифровой подписи, такие как внешний вид, позиционирование и хеширование, чтобы ваши электронные подписи соответствовали профессиональным стандартам.

Security note: In production, avoid hardcoding sensitive values (like passwords); instead, use secure configuration methods consistent with digital signature compliance requirements.


Шаг 3. Реализация пользовательской подписи хеша

Теперь присваиваем параметрам ваш пользовательский подписывающий хеш. Этот подписчик реализует интерфейс ICustomSignHash и будет использоваться для подписи хеша с помощью Azure Key Vault или любого другого внешнего устройства подписания.

var azureSigner = new AzureSigner();  
options.CustomSignHash = azureSigner;  
options.Signature.Certificate = azureSigner.GetPublicCertificateFromAzureStorage();

📌Annotation:

Здесь создаётся экземпляр AzureSigner. Его метод CustomSignHash будет вызван во время процесса подписания, а также он получает публичный сертификат из Azure Key Vault.


Шаг 4. Подписание документа

Наконец, вызовите метод Sign, чтобы сгенерировать подписанный PDF‑документ, используя вашу реализацию пользовательской подписи хеша.

signature.Sign(sampleOutputFilePath, options);

📌Annotation:

Этот метод применяет цифровую подпись к документу с учётом ранее сконфигурированных параметров, включая ваш пользовательский подписывающий хеш. Полученный PDF будет содержать криптографически защищённую подпись, которую можно проверить в стандартных PDF‑просмотрщиках или программно с помощью функций валидации GroupDocs.Signature.


Шаг 5. Подробная реализация подписи сертификата Azure

Ниже представлена полная реализация пользовательского подписчика, использующего Azure Key Vault для подписи сертификата. Класс демонстрирует профессиональные практики подписи сертификата в Azure, включая получение учётных данных, извлечение публичного сертификата и безопасную подпись хеша документа.

public class AzureSigner : ICustomSignHash  
{  
    public byte[] CustomSignHash(byte[] hash, HashAlgorithm hashAlgorithm,
     SignatureContext signatureContext)  
    {  
        // Delegate the signing operation to Azure  
        return SignWithAzure(hash);  
    }

    private static byte[] SignWithAzure(byte[] signableHash)  
    {  
        // Retrieve Azure credentials  
        var credential = GetAzureSecretCredential();

        // Specify your Key Vault certificate key identifier  
        var certificateKeyId = 
        "https://groupdocskeyvault.vault.azure.net/keys/GroupDocsSignatureCertificate/>";  
        CryptographyClient client = 
            new CryptographyClient(new Uri(certificateKeyId), credential);

        // Sign the hash using RS256  
        var result = client.Sign(SignatureAlgorithm.RS256, signableHash);  
        return result.Signature;  
    }

    static ClientSecretCredential GetAzureSecretCredential()  
    {  
        // Provide your Azure AD tenant, client, and secret details  
        string tenantId = "your tenant id";  
        string clientId = "your client id";  
        string secret = "your secret";  
        ClientSecretCredential credential = 
            new ClientSecretCredential(tenantId, clientId, secret);  
        return credential;  
    }

    public X509Certificate2 GetPublicCertificateFromAzureStorage()  
    {  
        // Define the Key Vault URI  
        string vaultUri = "https://groupdocskeyvault.vault.azure.net/>";  
        var credential  = GetAzureSecretCredential();  
        X509Certificate2 pubCertificate = 
        GetPublicCertificateFromAzureStorage(credential, vaultUri);  
        return pubCertificate;  
    }

    static X509Certificate2 GetPublicCertificateFromAzureStorage(
        ClientSecretCredential credential, string uri)  
    {  
        // Create a certificate client for the Key Vault  
        CertificateClient certificateClient = 
            new CertificateClient(new Uri(uri), credential);

        // Retrieve the certificate with the public key  
        KeyVaultCertificateWithPolicy certificate = 
        certificateClient.GetCertificateAsync("GroupDocsSignatureCertificate").Result;  
        return new X509Certificate2(certificate.Cer);  
    }  
}

📌Annotations:

  • Azure Credentials:
    Метод GetAzureSecretCredential создаёт учётные данные, используя ваш tenant ID, client ID и secret. Примечание по безопасности: храните эти данные надёжно (например, в Azure Key Vault или безопасном хранилище конфигураций), чтобы обеспечить целостность реализации .NET PDF‑подписания.
  • Signing with Azure:
    Метод SignWithAzure использует CryptographyClient из Azure SDK для подписи хеша сертификатом, хранящимся в Azure Key Vault, демонстрируя профессиональный подход к управлению сертификатами в соответствии с лучшими практиками цифровой подписи.
  • Public Certificate Retrieval:
    Метод GetPublicCertificateFromAzureStorage подключается к вашему Azure Key Vault и извлекает сертификат, необходимый для проверки подписи, гарантируя корректную валидацию электронных подписей документов.

Шаг 6. Шаги реализации Azure Key Vault для цифровой подписи PDF

Для интеграции Azure Key Vault с вашими пользовательскими сервисами подписи выполните следующие действия:

  1. Настройка Azure Key Vault:
    • Создайте экземпляр Azure Key Vault.
    • Загрузите сертификат подписи в Key Vault.
    • Настройте политики доступа для вашего приложения.
  2. Конфигурация учётных данных Azure:
    • Зарегистрируйте приложение в Azure Active Directory.
    • Получите tenant ID, client ID и client secret.
    • Создайте ClientSecretCredential для доступа к Key Vault.
  3. Получение сертификата:
    • С помощью CertificateClient извлеките сертификат с публичным ключом из Azure Key Vault.
    • Этот сертификат используется для проверки цифровой подписи.
  4. Реализация пользовательского подписания:
    • Используйте CryptographyClient из Azure SDK для подписи хеша документа.
    • Укажите соответствующий алгоритм подписи (например, RS256).

📌Annotation:

Каждый из этих шагов критически важен для обеспечения безопасности процесса подписания и защиты чувствительных ключей в облаке, одновременно предоставляя гибкость для реализации собственных сервисов подписи под специфические требования.


🧩 Расширение вашей реализации пользовательского подписания

Преимущество подхода пользовательской подписи хеша в GroupDocs.Signature заключается в возможности адаптировать его под практически любое внешнее устройство или сервис подписания. Ниже приведены примеры возможных расширений:

  1. Аппаратные модули безопасности (HSM): реализуйте подписчик, взаимодействующий с физическими HSM для максимальной защиты.
  2. Интеграция со смарт‑картами: создайте подписчик, работающий со считывателями смарт‑карт для корпоративных сред, требующих физической аутентификации.
  3. Биометрическая аутентификация: построьте сервис подписания, требующий отпечатка пальца или распознавания лица перед созданием подписи.
  4. Многопользовательское одобрение: реализуйте рабочий процесс, в котором несколько сторон должны одобрить документ до окончательной подписи.
  5. Облачные провайдеры ключей: адаптируйте пример для работы с AWS KMS, Google Cloud KMS или другими облачными сервисами управления ключами.

Создавая собственные сервисы подписания через интерфейс ICustomSignHash, вы сохраняете полный контроль над криптографическими операциями, одновременно используя мощные возможности обработки документов от GroupDocs.Signature for .NET.


✨ Заключительные мысли о электронных подписях документов

В этом руководстве показано, как интегрировать GroupDocs.Signature с Azure Key Vault для создания соответствующих требованиям электронных подписей PDF‑файлов в безопасной среде. Подписи, созданные таким способом, отвечают отраслевым стандартам подлинности и целостности. Следуя пошаговому подходу и соблюдая лучшие практики безопасности (например, безопасное хранение учётных данных), вы сможете внедрить надёжное решение цифровой подписи в своё .NET‑приложение, охватывающее весь документооборот.

Для получения более подробной информации и продвинутых сценариев обратитесь к официальной документации.


Get a Free Trial

You can try GroupDocs.Signature APIs for free by just downloading and installing the latest version on our release downloads website.

You can also get a temporary license to test all the library’s functionalities without any constraints. Head to the temporary license page to apply for a temporary license.

🔗 See Also

For more information and additional resources, you may find the following links useful: