1

古い PHP 5.6 バックエンドに WebAuthn 認証を実装しようとしています。しかし、小切手による最終検証にopenssl_verify()は問題があります。次の asn1 エラーが発生します。

0D0680A8:asn1 エンコーディング ルーチン:ASN1_CHECK_TLEN:間違ったタグ

これが何を意味するか知っている人はいますか?公開鍵の何が問題になっていますか? キーには有効なリソースがあります。

それとも、「ECDSA w/ SHA-256」をエンコードするソースはOPENSSL_ALGO_SHA256アルゴリズムでサポートされていませんか?

コード例:

$strData = '31341cd167aa4f6c63124ba7c8fd2ceb';
$strSignature = 'MEUCIQDTRfjvdX7CEBvWo29m+hngqO4HwNvpofEOUKvoy4ycewIgCTlGFUGk+0Xq+ejw/GoKRhafFJl02ZWLM9h/6R68uM4=';
$strPublicKey = 
'-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0iqlixe2nziH6sEv2eq0psxDlVnC
eLTM/GTwRzWdK4D9+8qbzXH6q5X9rYUuIWPxZoqY5hImjFIdJi7IjOvZJg==
-----END PUBLIC KEY-----';

$intCheckPublicKey = openssl_pkey_get_public($strCheckPublicKey);

// verify which should succeed
$alg        = OPENSSL_ALGO_SHA256;
$intSuccess = openssl_verify($strData, strSignature, $intCheckPublicKey, $alg);

if ($intSuccess === -1) {
    echo "openssl_verify() failed with error.  " . openssl_error_string() . "\n";
} elseif ($intSuccess === 1) {
    echo "Signature verification was successful!\n";
} else {
    echo "Signature verification failed.  Incorrect key or data has been tampered with\n";
}
4

1 に答える 1