Próbuję wykonać sprawdzanie poprawności RRSIG
, Próbuję użyć biblioteki openssl w PHP. Ale mam problem z przekazaniem klucza publicznego do funkcji openssl_verify
.Sprawdzanie poprawności RRSIG z PHP przy użyciu openssl
To jest kod bazowy, przy użyciu biblioteki Net/DNS2 do wykonania zapytania DNS z opcją DNSSEC. i uzyskaj DNSKEY i RRSIG.
<?php
require_once 'Net/DNS2.php';
$r = new Net_DNS2_Resolver(array('nameservers' => array('127.0.0.1')));
$r->dnssec = true;
try {
$result = $r->query('ip4afrika.nl', 'DNSKEY');
} catch(Net_DNS2_Exception $e) {
echo "::query() failed: ", $e->getMessage(), "\n";
die(); //
}
// print_r($result->answer);
$public_key_bin = base64_decode($result->answer[0]->key) ;
$public_key_str = $result->answer[0]->key; //echo $public_key_str; die();
// $public_key_res = openssl_x509_parse($public_key_bin);
$public_key_res = openssl_x509_read($public_key_str);
// $public_key_res = openssl_pkey_get_public($public_key_str);
while ($msg = openssl_error_string()) echo $msg . PHP_EOL;
otrzymuję ten komunikaty o błędach,
przy użyciu:
$public_key_res = openssl_x509_read($public_key_str);
PHP Warning: openssl_x509_read(): supplied parameter cannot be
coerced into an X509 certificate! in /src/Net_DNS2-1.4.3/i.php on line
34 PHP Stack trace: PHP 1. {main}() /src/Net_DNS2-1.4.3/i.php:0 PHP
2. openssl_x509_read() /src/Net_DNS2-1.4.3/i.php:34 error:0906D06C:PEM routines:PEM_read_bio:no start line
więc próbowałem dodając BEGIN/nagłówki END
$public_key_str = '-----BEGIN CERTIFICATE-----' . PHP_EOL . $result->answer[0]->key . PHP_EOL . '-----END CERTIFICATE-----' ;
I got to komunikaty o błędach,
error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib
Wygląda na to, że karmię funkcję niewłaściwym formatem, nadal googlam, ale jakakolwiek pomoc byłaby miła.
Ostatecznie chciałbym zweryfikować podpis z:
openssl_verify($data, $signature, $public_key_res, 'RSA-SHA256');
Czy obejrzysz @ http://php.net/manual/en/function.openssl-verify.php. Mają ładne przykłady: –
Tak, zrobiłem @E_p, mój problem polega na tym, jak przekazać klucz, który otrzymuję z zapytania DNS do funkcji, bez względu na to, jaki format wypróbuję, otrzymuję komunikat o nieprawidłowym formacie klucza w jakiś sposób. – Rabin
Czy to możliwe, że kiedy zdobędziesz klucz, ma dodatkową białą przestrzeń lub coś, co może stworzyć ten problem? –