JavaScript と WebCrypto API を使用して PDF に署名
WebCrypto API の進化と、Chrome や Firefox などの主要なブラウザでのそのサポートにより、可能性が高まっていますデジタル PDF 署名にそれを活用する方法について説明します。ただし、ドキュメントや詳細な例が不足しているため、課題が生じています。署名プロセスを説明する例は存在しますが、望ましい結果 (署名された Base64 PDF 文字列) は依然としてわかりません。
JavaScript と WebCrypto API だけを使用して PDF に署名できますか?
現在、WebCrypto API にはキー ストアや外部暗号化デバイスへのアクセスがありません。 PDF をサーバー境界内で保護する必要がある一般的な PDF 署名要件に対応するには、ドキュメント全体をブラウザに送信したり、API サーバーに署名したりすることはお勧めできません。
最適なアプローチ
効果的な解決策には、署名用の PDF のハッシュを作成し、そのハッシュをブラウザに送信し、ブラウザ拡張機能を介して JavaScript を利用してローカル キーストア (またはUSB/スマートカード) を使用して署名を生成します。結果の署名 (例: PKCS7 または CMS コンテナ) はサーバーに送り返すことができ、そこでハッシュの作成元となった元の PDF に挿入できます。
Signer.Digital Extension for Browser拡張機能
ブラウザベースの署名シナリオを容易にするために、Signer.Digital と呼ばれるブラウザ拡張機能と付随する.NETライブラリが利用可能です。この拡張機能は主要なブラウザ (Chrome および Firefox) とシームレスに動作し、Signer.Digital Browser Host を利用して Windows 証明書ストアおよび基盤となる CSP と対話してハッシュに署名します。
JavaScript コード サンプル
拡張機能から署名関数を呼び出すには、JavaScript コードを次のように使用できます。
// Calculate Sign for the Hash by Calling function from Extension SignerDigital SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256") // or "SHA256" // SignerDigitial.signHashCAdESBr method may be used for producing ICP-Brazil Signature .then( function (signDataResp) { // Send signDataResp to Server }, function (errmsg) { // Send errmsg to server or display the result in browser. } );
図: ブラウザからのデジタル署名
[ブラウザからのデジタル署名のイメージ]
以上がJavaScript と WebCrypto API だけで PDF に署名できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。