J'essaie de faire une validation RRSIG
, j'essaie d'utiliser la libs openssl en PHP. Mais j'ai un problème pour passer la clé publique à la fonction openssl_verify
.Valider RRSIG avec PHP en utilisant openssl
Il s'agit d'un code de base, utilisant la bibliothèque Net/DNS2 pour effectuer une requête DNS avec l'option DNSSEC. et obtenir le DNSKEY et 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;
Je reçois ce message d'erreur,
lors de l'utilisation:
$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
donc j'ai essayé d'ajouter BEGIN/en-têtes FIN
$public_key_str = '-----BEGIN CERTIFICATE-----' . PHP_EOL . $result->answer[0]->key . PHP_EOL . '-----END CERTIFICATE-----' ;
Et a obtenu ce message d'erreur,
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
Donc, il semble que je alimente la fonction au mauvais format, je suis toujours googling mais toute aide serait la bienvenue.
Finalement, j'aime valider la signature avec:
openssl_verify($data, $signature, $public_key_res, 'RSA-SHA256');
Avez-vous regardé @ http://php.net/manual/en/function.openssl-verify.php. Ils ont de bons exemples –
Oui j'ai fait @E_p, mon problème est comment passer la clé que je reçois de la requête DNS à la fonction, quel que soit le format que j'essaie, j'obtiens une erreur sur le format de clé étant incorrect d'une certaine façon. – Rabin
Est-il possible que lorsque vous obtenez une clé, il y ait un espace blanc supplémentaire ou quelque chose qui peut créer ce problème? –