मैं एक RRSIG
सत्यापन करने के लिए कोशिश कर रहा हूँ का उपयोग कर, मैं PHP में openssl lib उपयोग करने के लिए कोशिश कर रहा हूँ। लेकिन मुझे openssl_verify
फ़ंक्शन पर सार्वजनिक कुंजी पारित करने में समस्या हो रही है।पीएचपी साथ मान्य RRSIG openssl
यह एक आधार कोड, नेट/DNS2 लाइब्रेरी का उपयोग DNSSEC विकल्प के साथ एक DNS पूछताछ करना है। और DNSKEY और 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;
मैं इस त्रुटि संदेश मिलता है,
का उपयोग करते समय:
$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
तो मैं जोड़ने की कोशिश की BEGIN/END हेडर
$public_key_str = '-----BEGIN CERTIFICATE-----' . PHP_EOL . $result->answer[0]->key . PHP_EOL . '-----END CERTIFICATE-----' ;
और मिल गया इस त्रुटि संदेश,
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
तो यह मैं समारोह गलत प्रारूप खिला कर रहा हूँ लगता है, मैं अभी भी googling रहा हूँ, लेकिन किसी भी मदद का स्वागत किया जाएगा।
अंततः मैं के साथ हस्ताक्षर मान्य करना:
openssl_verify($data, $signature, $public_key_res, 'RSA-SHA256');
तुम देखो @ http://php.net/manual/en/function.openssl-verify.php किया। वे अच्छा उदाहरण है –
हाँ मैं @E_p किया था, मेरी समस्या कैसे कुंजी जो मैं कार्य करने के लिए DNS क्वेरी से प्राप्त कर पारित करने के लिए, कोई फर्क नहीं पड़ता जो प्रारूप मैं कोशिश, मैं कुंजी प्रारूप किसी तरह से गलत होने के बारे में त्रुटि मिलती है। – Rabin
क्या यह संभव है, कि जब आप कुंजी प्राप्त करते हैं तो इसमें अतिरिक्त सफेद-स्थान या कुछ ऐसा होता है जो उस समस्या को बना सकता है? –