pkcs7署名検証に関するphp。
// 受信者があなたが送信したものであることを確認できるように署名するメッセージ
//
$data = <<
あなたには夕食代として $10,000 を使う許可があります。
CEO
EOD;
// メッセージをファイルに保存
$fp = fopen("msg.txt" , "w");
fwrite($fp, $data);
fclose($fp);
// 暗号化します
if (openssl_pkcs7_sign("msg.txt", "signed. txt", "mycert.pem",
array("file://mycert.pem", "mypassphrase"),
array("To" => "joes@example.com", //キー付き構文
"From: HQ
"Subject" => "目のみ")
)) {
// 署名されたメッセージ- 送信してください!
exec(ini_get("sendmail_path") . " < signed.txt");
}
?>
この関数を使用して署名を作成します。これには、読み取りと署名が含まれます。ファイルを書き込む場合、ファイルの同時実行性が高くなる可能性があります。PHP でこれに対処する良い方法はありますか?
具体的な点は、署名が必要な元のデータ $data を渡すだけでよく、この関数は毎回元のデータ $data をファイルに保存し、署名を行って、最後に文字列を保存する必要があるということです。 signed.txt への署名の後に生成されるため、実際にはファイル操作の問題が確実に発生します。
-----解決策---------
msg.txt と signed.txt のファイル名には、同じファイル名を使用しないでください。md5(uniqid) .".txt" を使用できます。