在Symfony APIs内用OpenSSL进行请求信息签名和验证

95 阅读1分钟

在这个例子中,我们的客户端将使用OpenSSL来签署数据,然后再将其发送到服务器。当服务器收到数据时,它将使用OpenSSL来检查它是否用给定的签名签署过。如果验证成功,那么客户端就被认为是值得信赖的。在这个过程中,客户使用他的 "私钥",服务器使用客户的 "公钥 "进行验证。请看更多关于签署HTTP消息openssl_signopenssl_verify的信息。

流程

类别

签名控制器(SignatureController

我在这里非常懒惰,在控制器中做了太多的事情,但这纯粹是因为我想让帖子尽可能的简短。你可以把逻辑移到一个服务类中--只是一个例子。

namespace App\Controller;
services:
  • /client/create-keys - 使用这个端点,以编程方式创建客户的公钥和私钥。然后把私钥给客户,公钥给服务器。**注意:**我添加这个端点只是为了演示,所以你不应该在现实世界中这样做。相反,在终端创建这些密钥。

  • /client/create-signature - 使用这个端点来签署你的数据。这个端点的响应将包含签名,它将和实际数据一起被发送到服务器。**注意:**假设这个端点是在客户端API中。

  • /server/verify-signature - 当客户端发送请求时,它将在这里登陆,签名验证在这里进行。**注:**假设这个端点是在服务器API中。

签章工具(SignatureUtil

请阅读代码中的注释。

namespace App\Util;

测试

创建客户端密钥

$ ls -l config/ssl/

创建签名

$ curl -X POST \

消耗API

X-Signature header中使用签名。

$ curl -X POST \