はじめに
PDFファイルはさまざまな業界で不可欠であり、デジタル署名によってその真正性と完全性を確保することは重要なセキュリティ対策です。デジタル署名は法的有効性を提供し、文書の改ざんから保護します。この包括的なガイドでは、Azure Key Vault と GroupDocs.Signature for .NET を使用して安全な PDF デジタル署名サービスを作成し、.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 キーボルトと証明書の作成
まずは Azure Key Vault を設定し、証明書を生成しましょう。
ステップ 1: キーボルトのプロビジョニング
Create a new Azure Key Vault resource using the Azure portal. For detailed instructions, please check out this quick-start guide.
💡有効な Azure サブスクリプションをお持ちでない場合は、1 か月間の無料トライアルにサインアップして開始できます。
ステップ 2: 証明書の生成またはインポート
Once your key vault is up and running, navigate to its dashboard, select the Certificates tab, and click on Generate/Import to add your certificate.
ステップ 3: Method of Certificate Creation フィールドで Generate を選択し、新しい証明書を自動的に作成します。この例では、証明機関タイプとして Self-signed certificate を選択しています。
注: 既存の証明書を使用したい場合は、Import を選択してローカルデバイスから読み込むことができます。
ステップ 4: Advanced Policy Configuration に移動し、Private Key Export オプションを No に設定します。
ステップ 5: 最後に Create をクリックします。証明書がキーボルトに追加されます。
To view its details, simply click on the certificate to open its properties.
⚙️ Azure Key Vault へのアクセスを有効にするためのアプリケーション登録
Web API が Azure Key Vault にアクセスできるようにするには、Azure Active Directory にアプリケーションを登録する必要があります:
ステップ 1: Azure Active Directory に移動し、App registrations を選択し、New registration をクリックします。
ステップ 2: アプリケーション名を入力して登録します。
登録後、キー情報が提供されます。Client ID と Tenant ID をコピーしてアプリケーションで使用してください。
ステップ 3: サイドメニューから API Permissions を選択し、Add Permission をクリックします。Azure Key Vault を選び、Full Access を選択し、Add Permissions をクリックして完了します。
ステップ 4: Certificate & secrets を選択し、New client secret をクリックして新しいシークレットキーを作成します。このキーをコピーして .NET アプリケーションからアクセスできるようにします。
🔐 Azure Key Vault へのアクセス ポリシーの割り当て
前の手順でアプリケーションを作成・登録しました。次に、新しく登録したアプリケーションに Azure Key Vault へのアクセス権を付与する必要があります。
ステップ 1: Azure Key Vault に移動し、Access Policies を選択して Create をクリックします。
ステップ 2: 必要な権限を選択し、Next をクリックします。
ステップ 3: このウィンドウで、先ほど登録したアプリケーション GroupDocs.Signature.Service を選択し、Create をクリックします。
アプリケーションが Access Policies セクションに表示されます。
📑 Azure Key Vault と GroupDocs.Signature for .NET を使用した PDF 署名の方法
この包括的なガイドでは、Azure Key Vault を活用したカスタムハッシュ署名を使用して、.NET の GroupDocs.Signature API で PDF 文書に署名する方法を説明します。C# 環境の設定から、デジタル署名コンプライアンス要件を満たすカスタムハッシュ署名者の実装まで、プロセスを明確な手順に分解します。
カスタムハッシュ実装による安全な PDF 署名の概要
カスタムハッシュ署名アプローチは、.NET アプリケーションで電子文書署名を実装する際に卓越した柔軟性を提供します。以下をカバーします:
- GroupDocs.Signature for PDF デジタル署名と連携できるように .NET アプリケーションを設定する
- 適切な証明書管理でプロフェッショナルなデジタル署名オプションを構成する
- 最大の柔軟性を提供するカスタムハッシュ署名メカニズムを実装する
- Azure Key Vault を統合し、公開証明書を安全に取得して文書に署名する
- 実装全体でセキュリティのベストプラクティスに従う
追加の背景情報は、GroupDocs.Signature のカスタムハッシュによるデジタル署名に関するドキュメント を参照してください。
🚀 .NET PDF アプリケーションにおけるカスタムハッシュ署名のメリット
実装に入る前に、カスタムハッシュ署名がデジタル署名技術の重要な進歩である理由を理解することが重要です:
- 外部署名デバイスとの統合: カスタムハッシュ署名により、組織がすでに使用しているハードウェア セキュリティ モジュール(HSM)、スマートカード、生体認証デバイス、その他の特殊暗号ハードウェアとシームレスに接続できます。
- エンタープライズ向けの柔軟なアーキテクチャ: 組織は既存インフラ、レガシーシステム、または独自の署名ソリューションと連携する独自の署名サービスを作成でき、GroupDocs.Signature との互換性を保てます。
- セキュリティコンプライアンスの強化: ハッシュ生成と実際の署名プロセスを分離することで、暗号操作の管理が向上し、eIDAS、ESIGN Act、業界固有のコンプライアンス基準などの厳格な規制要件を満たすのに役立ちます。
- クラウドベースのキー管理のサポート: Azure Key Vault と統合することで、証明書をローカルマシンではなく、Microsoft の認定された安全なインフラストラクチャに安全に保管・管理できます。
- 署名プロセスのカスタマイズ: 標準的なデジタル署名実装を超える、カスタム承認ワークフロー、マルチパーティ署名シーケンス、または特殊な検証ルールを実装できます。
ステップ 1. C# PDF デジタル署名環境の構成
まず、ファイルパスを定義し、C# アプリケーションで GroupDocs.Signature オブジェクトを初期化します。この例では、元の 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...
}
}
📌注釈:
この手順では、署名したい PDF 文書を読み込む新しい Signature インスタンスを作成し、.NET アプリケーションでの安全な PDF 署名の基盤を構築します。
ステップ 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
};
📌注釈:
外観、位置、ハッシュなどの基本的なデジタル署名プロパティを構成し、電子文書署名がプロフェッショナルな基準を満たすようにします。
セキュリティ上の注意: 本番環境では、パスワードなどの機密情報をハードコーディングしないでください。デジタル署名コンプライアンス要件に合致した安全な設定方法を使用してください。
ステップ 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)
{
// 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);
}
}
📌注釈:
- Azure 資格情報:
GetAzureSecretCredential メソッドはテナント ID、クライアント ID、シークレットを使用して資格情報を作成します。セキュリティ上の注意: これらの資格情報は安全に保管してください(例: Azure Key Vault や安全な構成ストアを使用)。これにより .NET PDF 署名実装の整合性が保たれます。 - Azure での署名:
SignWithAzure メソッドは Azure SDK の CryptographyClient を使用して、Azure Key Vault に保存された証明書でハッシュに署名します。これは、デジタル署名コンプライアンスのベストプラクティスに従った証明書管理のプロフェッショナルなアプローチを示しています。 - 公開証明書の取得:
GetPublicCertificateFromAzureStorage メソッドは Azure Key Vault に接続し、署名検証に必要な証明書を取得します。これにより、電子文書署名を適切に検証できるようになります。
ステップ 6. PDF デジタル署名のための Azure Key Vault 実装手順
Azure Key Vault をカスタム署名サービスに統合するには、以下の手順に従ってください。
- Azure Key Vault の設定:
- Azure Key Vault インスタンスを作成する。
- 署名証明書を Key Vault にアップロードする。
- アプリケーション用のアクセス ポリシーを構成する。
- Azure 資格情報の構成:
- Azure Active Directory にアプリケーションを登録する。
- テナント ID、クライアント ID、クライアント シークレットを取得する。
- Key Vault へアクセスするための
ClientSecretCredentialを作成する。
- 証明書の取得:
CertificateClientを使用して Azure Key Vault から公開鍵を含む証明書を取得する。- この証明書はデジタル署名の検証に使用される。
- カスタム署名の実装:
- Azure SDK の
CryptographyClientを使用して文書のハッシュに署名する。 - 適切な署名アルゴリズム(例: RS256)を指定する。
- Azure SDK の
📌注釈:
これらの各ステップは、署名プロセスの安全性を確保し、機密キーをクラウドで保護しながら、特殊な要件に合わせた独自の署名サービスを実装できる柔軟性を提供するために重要です。
🧩 カスタム署名実装の拡張
GroupDocs.Signature のカスタムハッシュ署名アプローチの優れた点は、事実上すべての外部署名デバイスやサービスで動作するように適応できることです。以下は、この実装を拡張する例です:
- ハードウェア セキュリティ モジュール (HSM): 最大のセキュリティを実現するために、物理的な HSM と通信するカスタム署名者を実装する。
- スマートカード統合: 物理的認証が必要な企業環境向けに、スマートカードリーダーと連携する署名者を作成する。
- 生体認証: 指紋や顔認識が必要な署名作成を許可する署名サービスを構築する。
- マルチパーティ承認: 複数の関係者が承認しなければ最終署名が適用されないカスタム署名ワークフローを実装する。
- クラウドサービスプロバイダー: 例を AWS KMS、Google Cloud KMS、その他のクラウドキー管理サービスで動作するように適応する。
ICustomSignHash インターフェイスを通じて独自の署名サービスを実装することで、暗号操作を完全に制御しつつ、GroupDocs.Signature for .NET の強力な文書処理機能を活用できます。
✨ 電子文書署名に関する最終的な考察
本ガイドでは、GroupDocs.Signature と Azure Key Vault を統合し、PDF ファイル向けにコンプライアンスに準拠した電子文書署名を安全に作成する方法を示しました。この方法で作成された電子文書署名は、真正性と完全性に関する業界標準を満たします。ステップバイステップのアプローチとセキュリティのベストプラクティス(例: 資格情報の安全な取り扱い)に従うことで、.NET アプリケーション全体の文書ワークフローで機能する堅牢なデジタル署名ソリューションを実装できます。
詳細や高度なシナリオについては、公式ドキュメント を参照してください。
無料トライアルを取得
最新バージョンをダウンロードしてインストールするだけで、リリースダウンロードサイト から GroupDocs.Signature API を無料で試すことができます。
また、制約なしでライブラリのすべての機能をテストできる一時ライセンスを取得することもできます。temporary license page にアクセスして一時ライセンスを申請してください。
🔗 参照
詳細情報や追加リソースについては、以下のリンクが役立つでしょう: