PDF電子署名の状態と信頼性をわかりやすく解説
PDF署名の検証結果は、矛盾して見えることがあります。暗号学的には有効でも署名者が不明な場合や、文書が変更されていなくても証明書の期限が切れている場合があるためです。この機能は、4つの一般的な状態フラグを、信頼性の評価、個別の所見、推奨される次の対応に整理します。PDFや証明書そのものを再検証する機能ではありません。検証ツールがすでに示した証拠を説明し、文書の完全性、署名者の身元、証明書の有効期間を区別して、署名済みファイルを信頼できるか判断しやすくします。
無料で実行
有効性と文書の完全性を分けて確認します
有効フラグは、署名が暗号学的検証に合格したかを示しますが、それだけで信頼性のすべてが決まるわけではありません。署名後変更フラグは、現在の文書が署名時の状態と異なるかを示します。変更が報告された場合、署名自体を数学的に確認できても、現在のPDFを署名対象の版として信頼すべきではありません。有効フラグが偽の場合も、署名を完全性の証拠として利用できません。有効が真で変更がない場合は完全性を支持しますが、署名者の身元や証明書の期間は別途確認が必要です。そのため、この説明では暗号学的な失敗や変更を優先し、単純な緑色・赤色の表示にまとめず、提供された各状態が何を意味するかを個別に示します。
不明な署名者と壊れた署名を区別します
署名者不明は、身元と信頼チェーンに関する警告であり、PDFが改ざんされた証拠とは限りません。検証ツールは暗号学的署名を確認できても、署名者を認識するためのルート証明書、中間証明書、組織の方針、ローカルな信頼設定を持っていない場合があります。この場合、文書は完全でも、証明書に対応する人物や組織は未確認です。証明書チェーンを独立して調べ、署名者情報を信頼できる情報源と照合し、認証済み経路から文書を取得してください。表示名だけで身元を判断しないでください。一方、この警告だけで悪意ある改ざんとも断定できません。より重大な完全性エラーがなければ、要確認として扱います。フラグが偽の場合は、不明と報告されなかったことだけを示し、提供されていない認証局や失効確認の情報は補いません。
証明書の期限を署名時点から判断します
期限切れ証明書は、時間に関する証拠とともに確認する必要があります。現在期限切れであることだけでは、署名時にも無効だったとは限りません。信頼できるタイムスタンプは有効期間内の署名を示し、長期検証データは証明書チェーンや失効状態の証拠を保持できます。証拠がなければ重要な疑問が残ります。そのため、期限切れを直ちに不正と判断せず、タイムスタンプ、有効期間、失効情報の確認を推奨します。期限切れと署名者不明が同時なら身元と時期の両方を調べ、文書変更もある場合は現在のファイルが署名時と異なるため完全性の問題を優先します。この結果は入力されたフラグの解説であり、検証ソフトや法的助言の代替ではありません。重要な契約や規制記録では、原本と完全な検証報告を保存し、担当部署に確認してください。
活用例
分かりにくい警告の説明
PDFを再検証したと装うことなく、複数の技術的警告を読みやすい評価にまとめます。
署名済み文書の仕分け
直ちに拒否すべきファイルと、署名者やタイムスタンプの確認が必要なファイルを分けます。
監査記録への補足
状態フラグと決定的な説明を保存し、後日の確認で判断理由を理解できるようにします。
よくある質問
PDFそのものを検証しますか?
いいえ。検証ツールの状態を説明する機能であり、PDF、証明書、タイムスタンプ、失効サービスは調査しません。
署名者が不明でも署名は有効ですか?
はい。暗号学的な完全性が合格しても、信頼できる身元のチェーンを構築できない場合があります。
期限切れ証明書は必ず署名を無効にしますか?
いいえ。信頼できるタイムスタンプが署名時の有効性を示す場合がありますが、その証拠を確認する必要があります。
署名後にPDFが変更された場合はどうなりますか?
現在の文書を署名対象の状態として信頼しないでください。原本を入手して再度検証してください。
APIリクエストの料金はいくらですか?
APIリクエスト1件の料金は$0.002です。同じフラグには決定的に同じ結果を返します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/pdf/signature-verify-status-explain \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"valid":true,"modified_since_signing":false}'const res = await fetch("https://api.kit.forhosting.com/pdf/signature-verify-status-explain", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"valid": true,
"modified_since_signing": false
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/signature-verify-status-explain",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"valid": true,
"modified_since_signing": false
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/signature-verify-status-explain", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"valid":true,"modified_since_signing":false}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"valid":true,"modified_since_signing":false}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/signature-verify-status-explain", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"valid": true,
"modified_since_signing": false
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.signature_verify_status_explain",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 25 |
max_pages | 200 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |