私はopenssl_sign
を使用してXMLデータの署名を生成し、後でopenssl_verify
を使用して検証しようとしています。残念ながらopenssl_verify
はfalseを返し続けます。私の証明書から私の私有鍵と公開鍵を抽出したかどうか分からなかったので、a basic exampleも試しました。署名データがopenssl_signとopenssl_verifyを使用して一致しない
openssl_sign
実際にはバイナリ署名を返します。これまでのところとても良い(私の秘密鍵をPEM証明書から抽出してこれを行った)。また、例ではopenssl_verify
はfalseを返します。この例では秘密鍵と公開鍵が正しいと仮定します。署名と確認の手助けは?
<?php
$Data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// $key_private_id = openssl_get_privatekey(file_get_contents($ClientCertFile), $passphrase);
// $key_public_id = openssl_get_publickey(file_get_contents($ClientCertFile));
$key_private_id = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4Z
RZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9
sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R
6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJ
h1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2n
Y79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHra
I2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI
-----END RSA PRIVATE KEY-----
EOD;
$key_public_id = <<<EOD
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6
zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQ==
-----END PUBLIC KEY-----
EOD;
if(!openssl_sign($Data, $Signature, $key_private_id, OPENSSL_ALGO_SHA1)) {
echo "Failed to sign data: $Data ";
}
if(!openssl_verify($Data, $Signature, $key_public_id, OPENSSL_ALGO_SHA1)) {
echo "Verify failed on signed data: $Data ";
}
これはコードのコピー/貼り付けですか? 'EOD;'行の後ろに空白があり、問題が発生します。空白が削除されてもエラーは表示されません。 – miken32
ありがとうmiken32、それは本当に働いている!証明書の掘り出しを開始 –