php - 如何在 PHP 中验证 DNSSEC?

标签 php

我一直在尝试找出一种在 PHP (oa1) 中验证 DNS 记录的方法,但没有成功。

我可以使用这个库验证整个域,但不能验证单个记录:https://github.com/metaregistrar/php-dnssec-validator

此外,该库仅允许验证一小部分 TLD。

是否有其他图书馆可以为我处理这个问题,或者我应该研究其他事情?

我还发现了这个:http://www.phpclasses.org/package/9031-PHP-Validate-DNSSEC-keys-and-calculate-the-DS-record.html

但我不知道如何获取 key 以用于其验证功能。

请帮忙!

更新

所以,我最终使用了这个...

exec('host -t RRSIG ' . $domain, $output);

以最少的麻烦返回 RRSIG 或缺少 RRSIG。

最佳答案

PHP 引擎有一组它支持的固定 DNS 记录类型,全部由 type 定义。 dns_get_record 的参数。您可以通过查看 engine code 来仔细检查此列表实现 DNS 查询。

不幸的是,没有任何 DNSSEC 记录在该预定义列表中。因此,您需要依赖库或外部工具。

我会使用 Net_DNS2 , 因为它支持很多 DNSSEC RR .示例:

$google = new \Net_DNS2_Resolver(['nameservers' => ['8.8.8.8', '8.8.4.4']]);
$google->dnssec = true;
try {
    $result = $google->query('kyhwana.org', 'SSHFP');
} catch(\Net_DNS2_Exception $ex) {
    die($ex->getMessage());
}

foreach ($result->answer as $answer) {
    if ($answer instanceof \Net_DNS2_RR_SSHFP) {
        printf(
            '%s %d %s %s %d %d %s' . PHP_EOL,
            $answer->name,
            $answer->ttl,
            $answer->class,
            $answer->type,
            $answer->algorithm,
            $answer->fp_type,
            $answer->fingerprint
        );
    } else if ($answer instanceof \Net_DNS2_RR_RRSIG) {
        printf('Signed by %s: %s' . PHP_EOL, $answer->signname, $answer->signature);
    }
}

此外:如果您的域使用 ECDSA 算法或 SHA-256 指纹(如上例),那么您需要最新的 Net_DNS2 代码来修复 Issue #39 .

关于php - 如何在 PHP 中验证 DNSSEC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29147354/

相关文章:

javascript - 使用 Dropzone.js 在服务器上删除重命名的文件

php - 字符串函数在 PHP 中是 ASCII 安全的吗?

php - 如何去掉 "Quick edit"列表页中的 "register_post_meta"选项

php - 在 php 中将本地日期、时间和时区值转换为 utc 时区

php - LuhnCalc 和 bpay MOD10 版本 5

php - similar_text 没有给出预期的结果

php - 我可以使用 ajax 选择 mysqli 数据库行吗?

PHP 与 MySQL 查询的问题。该函数仅针对第一个 mysql 结果运行

javascript - 在 ajax 回调函数的每个循环之后附加输出

php - Laravel 在工作中使用外观