gpt4 book ai didi

php - 使用 PHP + Curl 固定 TLS 公钥?

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:28 25 4
gpt4 key购买 nike

我想在两个通过 TLS 1.2 保护的应用程序之间建立通信,其中固定端点的公钥。 (不涉及证书颁发机构。)

此外,我什至不想处理证书;只是 RSA/ECDSA 公钥。

具体来说,它们都是 PHP 应用程序,我使用 curl 来促进通信。

有人做过吗?

最佳答案

终于在 PHP 中实现了这个功能,只要你的 cURL 版本足够,你也可以在旧的 PHP 版本中使用它!

要求

  • PHP v7.0.7 或更高版本(下面显示了一个技巧,可以使其与早期版本一起使用)
  • cURL v7.39 或更高版本

准备(获取图钉)

您可以使用 DER 格式的公钥 SHA-256 哈希值进行固定。 不要将它与证书指纹混淆!您将在此处固定公钥,而不是证书。

最好引用 official cURL documentation 来提取此 key 。然而,可能有更简单的方法:引脚格式与 HPKP 中使用的格式相同。因此,如果网络服务器使用 HPKP 我强烈建议您使用它发送到那里的哈希值!您可以简单地从标题中复制并粘贴它们。您只需稍微更改一下格式,如下所示。

Public-Key-Pins: pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="; pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="; max-age=5184000;

到达:

sha256//cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=;sha256//M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE

但是请注意,HPKP 和 CURL 的 CURLOPT_PINNEDPUBLICKEY 之间有一个很大的区别:在 HPKP 中,您可以固定中间证书的公钥,而在使用 CURL 时,您不能使用 currently这样做!

由于已经有许多 HPKP 教程,您还可以找到其他创建这些哈希值的好指南。这是例如使用现有证书文件 by Scott Helme 的单行代码:

openssl x509 -pubkey < tls.crt | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64

选项的格式最终如下所示。您可以固定任意多的 key ,我还建议固定至少一个当前未使用的备份 key ,这样您就可以在服务器出现漏洞或类似情况时轻松切换 key 。

sha256//Base64EncodedHashOfPublicKey;sha256//Base64EncodedHashOfAnotherPublicKey

或者,如果需要,您也可以指定证书文件的路径。

在 PHP 中使用

在 PHP 中你可以像这样使用它:

<?php
// this line makes it possible to use that option in PHP < 7.0.7
defined('CURLOPT_PINNEDPUBLICKEY') || define('CURLOPT_PINNEDPUBLICKEY', 10230);

$ch = curl_init("https://example.com");
curl_setopt($ch, CURLOPT_PINNEDPUBLICKEY, "YourPinsHere!!");
// ...

然后您应该通过指定一个无效的引脚来测试它。如果它没有失败,要么不满足您的要求,要么您在实现它时犯了错误。您还可以使用以下命令在控制台上对其进行测试:

curl https://example.com --pinnedpubkey "YourPinsHere!!"

关于php - 使用 PHP + Curl 固定 TLS 公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27112356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com