はじめに

PDFファイルはさまざまな業界で重要であり、デジタル署名を使用してその真正性と完整性を確保することは重要なセキュリティ対策です。デジタル署名は法的な有効性を提供し、文書の改ざんを防ぎます。この包括的なガイドでは、Azure Key VaultとGroupDocs.Signature for .NETを使用して.NET PDF署名を実装する方法について説明します。

電子文書署名は、紙のないワークフローに移行する企業にとってますます重要になっています。GroupDocs.Signature for .NETは、さまざまな規制フレームワークに対応する強力なC# PDFデジタル署名ソリューションを提供します。.NETアプリケーションでのPDF署名に新しい方でも、既存の実装を強化する方でも、このチュートリアルでは必要なすべての情報をカバーしています。

Azure Key Vaultは、暗号化キーと証明書の安全な保存と管理を可能にするクラウドベースのキー管理サービスです。GroupDocs.Signature for .NETは、開発者がプログラム的にPDFファイルにデジタル署名を適用できる強力で安全なPDF署名APIです。これらの技術を統合することで、強力で効率的なPDFデジタル署名サービスを構築できます。

このガイドでは、特にカスタムハッシュ署名という強力な機能を紹介します。このアプローチは、署名ワークフローに非常に柔軟性を提供します。これにより、ハードウェアセキュリティモジュール(HSM)、スマートカード、または他の暗号化デバイスをアプリケーションに接続できます。カスタムハッシュ署名を使用すると、開発者は独自の署名サービスを作成し、専用システム、レガシーインフラ、または専用のセキュリティハードウェアとインターフェースを取ることができます。これにより、GroupDocs.Signatureフレームワークとの互換性を維持しながら、特定のセキュリティ要件や既存の暗号化インフラへの投資を持つ組織に最適なソリューションとなります。

🔐 Azure Key Vaultと証明書の作成

まず、Azure Key Vaultを設定し、証明書を生成します。

ステップ1: Key Vaultのプロビジョニング

Azureポータルを使用して新しいAzure Key Vaultリソースを作成します。詳細な手順については、このクイックスタートガイドを参照してください。

💡アクティブなAzureサブスクリプションがない場合は、1ヶ月間の無料トライアルにサインアップして開始できます。

ステップ2: 証明書の生成またはインポート

Key Vaultが動作している場合、ダッシュボードに移動し、証明書タブを選択し、生成/インポートをクリックして証明書を追加します。

Azure Key VaultインターフェースでPDF署名用のデジタル署名証明書を作成する

ステップ3: 証明書作成方法フィールドで、生成を選択して新しい証明書を自動的に作成します。この例では、自己署名証明書を証明書認証機関の種類として選択します。

GroupDocs .NET PDFデジタル署名プロセスの完全なワークフロー図

注意: 既存の証明書を使用したい場合は、インポートを選択してローカルデバイスから読み込むことができます。

GroupDocs.Signatureのカスタムハッシュ署名実装のC#コード例

ステップ4: 高度なポリシー設定に移動し、プライベートキーのエクスポートオプションをいいえに設定します。

Azure証明書署名プロセス図でコンポーネント間のデータフローを示す

ステップ5: 最後に、作成をクリックします。証明書はKey Vaultに追加されます。

証明書の詳細を表示するには、証明書をクリックしてプロパティを開きます。

.NETアプリケーションでPDF署名検証例を示す

⚙️ Azure Key Vaultへのアクセスを有効にするためのアプリケーションの登録

Web APIがAzure Key Vaultにアクセスできるようにするには、Azure Active Directoryで登録する必要があります:

ステップ1: Azure Active Directoryに移動し、アプリの登録を選択し、新しい登録をクリックします。

Azure Key VaultとGroupDocsの電子文書署名の統合

ステップ2: アプリケーション名を入力し、登録します。

セキュリティ設定付きの安全なPDF署名API構成画面

登録後、キーの詳細が表示されます。アプリケーションで使用するために、クライアントIDテナントIDをコピーします。

デジタル署名権限のAzure Key Vaultアクセスポリシー設定インターフェース

ステップ3: サイドメニューからAPIの権限を選択し、権限の追加をクリックします。Azure Key Vaultを選択し、完全なアクセスを選択し、プロセスを完了するために権限の追加をクリックします。

.NET PDF署名出力例で成功した署名文書を示す

ステップ4: 証明書とシークレットを選択し、新しいクライアントシークレットをクリックして新しいシークレットキーを作成します。このキーをコピーして.NETアプリケーションからアクセスします。

GroupDocsカスタムハッシュ実装の外部署名デバイス統合図

🔐 Azure Key Vaultにアクセスポリシーを割り当てる

前のステップでアプリケーションを作成し、登録しました。次に、新しく登録したアプリケーションにAzure Key Vaultへのアクセスを許可する必要があります:

ステップ1: Azure Key Vaultに移動し、アクセスポリシーを選択し、作成をクリックします。

規制要件に対するデジタル署名準拠設定の構成

ステップ2: 必要な権限を選択し、次へをクリックします。

PDF署名サービス用のAzure Active Directoryアプリケーション登録

ステップ3: このウィンドウで、前に登録したアプリケーションGroupDocs.Signature.Serviceを選択し、作成をクリックします。

コンポーネント関係を示すカスタム署名サービスのアーキテクチャ図
視覚的な署名のカスタマイズに使用されるGroupDocs署名の外観設定パネル

アプリケーションはアクセスポリシーセクションに表示されます。

検証ワークフローのステップを示すPDFデジタル署名検証プロセス

📑 Azure Key Vaultを使用したGroupDocs.Signature for .NET PDF署名の方法

この包括的なガイドでは、カスタムハッシュ署名を使用してAzure Key Vaultを活用したGroupDocs.Signature APIを使用してPDF文書に署名する方法を説明します。C#環境の設定から、デジタル署名準拠要件を満たすカスタムハッシュ署名者を実装するまでのプロセスを明確なステップに分けて説明します。

セキュアなPDF署名のカスタムハッシュ実装の概要

カスタムハッシュ署名アプローチは、.NETアプリケーションでの電子文書署名を実装する際に非常に柔軟性を提供します。以下をカバーします:

  • GroupDocs.Signatureを使用してPDFデジタル署名を実行する.NETアプリケーションの設定
  • 適切な証明書管理を使用してプロフェッショナルなデジタル署名オプションを設定
  • 最大限の柔軟性を提供するカスタムハッシュ署名メカニズムの実装
  • Azure Key Vaultを使用して公共証明書を安全に取得し、文書に署名
  • 実装全体でセキュリティベストプラクティスを遵守

追加の背景情報については、GroupDocs.Signatureのカスタムハッシュによるデジタル署名のドキュメントを参照してください。

🚀 .NET PDFアプリケーションにおけるカスタムハッシュ署名の利点

実装に入る前に、カスタムハッシュ署名がデジタル署名技術における重要な進歩である理由を理解することが重要です:

  1. 外部署名デバイスとの統合: カスタムハッシュ署名は、ハードウェアセキュリティモジュール(HSM)、スマートカード、バイオメトリックデバイス、または他の専用暗号化ハードウェアとシームレスに接続できます。
  2. エンタープライズソリューション用の柔軟なアーキテクチャ: 組織は、既存のインフラ、レガシーシステム、または専用署名ソリューションとインターフェースを取る独自の署名サービスを記述し、GroupDocs.Signatureとの互換性を維持できます。
  3. 強化されたセキュリティ準拠: ハッシュ生成と実際の署名プロセスを分離することで、暗号化操作に対するより良い制御を保ち、eIDAS、ESIGN法、業界特有の準拠標準などの厳格な規制要件を満たすのに役立ちます。
  4. クラウドベースのキー管理のサポート: Azure Key Vaultを統合することで、証明書をMicrosoftの認定セキュアインフラに安全に保存および管理できます。
  5. 署名プロセスのカスタマイズ: 標準的なデジタル署名実装を超えるカスタム承認ワークフロー、複数の署名者の署名シーケンス、または専用の検証ルールを実装します。

ステップ1. C# PDFデジタル署名環境の設定

まず、C#アプリケーションでファイルパスを定義し、GroupDocs.Signatureオブジェクトを初期化します。この例では、署名するPDFファイルと署名された文書の出力場所を指定します。

public static void SignDocument()
{
    // ソースと出力文書のパスを定義
    string sampleFilePath = "sample.pdf";
    string sampleOutputFilePath = "signed.pdf";

    using (Signature signature = new Signature(sampleFilePath))
    {
        // コードは次のステップで続きます...
    }
}

📌注釈:

このステップでは、署名するPDF文書を読み込む新しいSignatureインスタンスを作成し、.NETアプリケーションでの安全なPDF署名の基盤を確立します。


ステップ2. デジタル署名オプションの設定

次に、デジタル署名オプションを設定します。これには、証明書の詳細、視覚的な外観、ハッシュアルゴリズムが含まれます。カスタムハッシュ署名は後にプラグインされます。

// デジタル署名オプションを初期化
DigitalSignOptions options = new DigitalSignOptions()
{
    Signature = new DigitalSignature(),
    Password = "1234567890",      // 証明書パスワード
    Reason = "Sign",              // 署名理由
    Contact = "JohnSmith",        // 連絡先情報
    Location = "Office1",         // 署名場所
    AllPages = true,              // すべてのページに署名を適用
    Width = 80,
    Height = 60,
    VerticalAlignment = VerticalAlignment.Bottom,
    HorizontalAlignment = HorizontalAlignment.Right,
    Margin = new Padding() { Bottom = 10, Right = 10 },
    HashAlgorithm = HashAlgorithm.Sha256 // ハッシュにSHA-256を指定
};

📌注釈:

基本的なデジタル署名のプロパティ(外観、配置、ハッシュ)を設定して、電子文書署名がプロフェッショナルな基準を満たすようにします。

セキュリティの注意: 運用環境では、感度の高い値(パスワードなど)をハードコードしないでください。代わりに、デジタル署名準拠要件に従った安全な設定方法を使用してください。


ステップ3. カスタムハッシュ署名の実装

次に、カスタムハッシュ署名者をオプションに割り当てます。このカスタム署名者はICustomSignHashインターフェースを実装し、Azure Key Vaultまたは他の外部署名デバイスと統合するために署名プロセス中に呼び出されます。

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

📌注釈:

AzureSignerのインスタンスを作成し、そのCustomSignHashメソッドは署名プロセス中に呼び出され、Azure Key Vaultから公共証明書を取得します。


ステップ4. 文書の署名

最後に、Signメソッドを呼び出して、カスタムハッシュ署名実装を使用して署名されたPDF文書を生成します。

signature.Sign(sampleOutputFilePath, options);

📌注釈:

このメソッドは、以前に設定したオプション(カスタムハッシュ署名者を含む)を使用して文書にデジタル署名を適用します。結果のPDFには、標準的なPDFリーダーまたはGroupDocs.Signatureの検証機能を使用して検証できる暗号化的に安全な署名が含まれます。


ステップ5. Azure証明書署名の詳細な実装

以下は、Azure Key Vaultを使用したカスタム署名者の完全な実装です。このクラスは、Azure証明書署名のプロフェッショナルな実践を示し、Azure資格情報を取得し、公共証明書を取得し、文書ハッシュを安全に署名します。

public class AzureSigner : ICustomSignHash
{
    public byte[] CustomSignHash(byte[] hash, HashAlgorithm hashAlgorithm,
     SignatureContext signatureContext)
    {
        // 署名操作をAzureに委任
        return SignWithAzure(hash);
    }

    private static byte[] SignWithAzure(byte[] signableHash)
    {
        // Azure資格情報を取得
        var credential = GetAzureSecretCredential();

        // Key Vault証明書キー識別子を指定
        var certificateKeyId =
        "https://groupdocskeyvault.vault.azure.net/keys/GroupDocsSignatureCertificate/>";
        CryptographyClient client =
            new CryptographyClient(new Uri(certificateKeyId), credential);

        // RS256を使用してハッシュを署名
        var result = client.Sign(SignatureAlgorithm.RS256, signableHash);
        return result.Signature;
    }

    static ClientSecretCredential GetAzureSecretCredential()
    {
        // Azure ADテナント、クライアント、シークレットの詳細を提供
        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()
    {
        // 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)
    {
        // Key Vault用の証明書クライアントを作成
        CertificateClient certificateClient =
            new CertificateClient(new Uri(uri), credential);

        // 公共キーを含む証明書を取得
        KeyVaultCertificateWithPolicy certificate =
        certificateClient.GetCertificateAsync("GroupDocsSignatureCertificate").Result;
        return new X509Certificate2(certificate.Cer);
    }
}

📌注釈:

  • Azure資格情報: GetAzureSecretCredentialメソッドは、テナントID、クライアントID、シークレットを使用して資格情報を作成します。セキュリティの注意: これらの資格情報を安全に保存すること(例えば、Azure Key Vaultまたは安全な設定ストアを使用して)を確認し、.NET PDF署名実装の完整性を維持します。
  • Azureでの署名: SignWithAzureメソッドは、Azure SDKのCryptographyClientを使用して、Azure Key Vaultに保存された証明書でハッシュを署名し、デジタル署名準拠のベストプラクティスに従ったプロフェッショナルな証明書管理のアプローチを示します。
  • 公共証明書の取得: このメソッドは、Azure Key Vaultに接続し、署名の検証に必要な証明書を取得し、電子文書署名が適切に検証できるようにします。

ステップ6. PDFデジタル署名用のAzure Key Vault実装ステップ

カスタム署名サービスとAzure Key Vaultを統合するには、以下の手順に従います:

  1. Azure Key Vaultの設定:
    • Azure Key Vaultインスタンスを作成します。
    • 署名証明書をKey Vaultにアップロードします。
    • アプリケーションのアクセスポリシーを設定します。
  2. Azure資格情報の設定:
    • Azure Active Directoryでアプリケーションを登録します。
    • テナントID、クライアントID、クライアントシークレットを取得します。
    • Key VaultにアクセスするためのClientSecretCredentialを作成します。
  3. 証明書の取得:
    • CertificateClientを使用して、公共キーを含む証明書をAzure Key Vaultから取得します。
    • この証明書は、デジタル署名を検証するために使用されます。
  4. カスタム署名の実装:
    • Azure SDKのCryptographyClientを使用して、文書のハッシュを署名します。
    • 適切な署名アルゴリズム(例: RS256)を指定します。

📌注釈:

これらの各ステップは、署名プロセスが安全であることを確認し、敏感なキーがクラウドで保護されながら、特定の要件を満たすためのカスタム署名サービスを実装するために重要です。


🧩 カスタム署名実装の拡張

GroupDocs.Signatureのカスタムハッシュ署名アプローチの美しさは、ほぼすべての外部署名デバイスやサービスと連携できる点です。以下は、この実装を拡張する方法の例です:

  1. ハードウェアセキュリティモジュール(HSM): 物理的なHSMと通信するカスタム署名者を実装します。
  2. スマートカード統合: スマートカードリーダーとインターフェースを取る署名者を作成します。
  3. バイオメトリック認証: 署名の作成を認可する前に指紋または顔認証が必要な署名サービスを構築します。
  4. 複数の承認: 署名が最終的に適用されるまで複数のパーティが承認するカスタム署名ワークフローを実装します。
  5. クラウドサービスプロバイダー: 例をAWS KMS、Google Cloud KMS、または他のクラウドキー管理サービスと連携するように適応します。

ICustomSignHashインターフェースを使用して独自の署名サービスを実装することで、暗号化操作に対する完全な制御を保ちながら、GroupDocs.Signature for .NETの強力な文書処理機能を活用できます。


✨ 電子文書署名に関する最終的な考え

このガイドでは、Azure Key Vaultを使用してPDFファイルに対する準拠電子文書署名を安全に作成する方法を示しました。この方法で作成された電子文書署名は、業界標準の真正性と完整性を満たします。このステップバイステップのアプローチとセキュリティベストプラクティス(例えば、安全な資格情報の処理)を遵守することで、.NETアプリケーションで機能する強力なデジタル署名ソリューションを実装できます。

詳細情報と高度なシナリオについては、公式ドキュメントを参照してください。


無料トライアルを受ける

最新バージョンをダウンロードしてインストールすることで、GroupDocs.Signature APIを無料で試すことができます。リリースダウンロードサイトで最新バージョンをダウンロードしてインストールしてください。

すべてのライブラリ機能を制限なく試すための一時的なライセンスを取得することもできます。一時的なライセンスを申請するには、一時的なライセンスページにアクセスしてください。

🔗 関連リンク

追加情報とリソースについては、以下のリンクが役立つかもしれません: