PHP - SSL套接字客户端证书

use*_*602 5 php sockets ssl certificate client-side

我目前正在使用tcp套接字在PHP中使用套接字流在服务器和客户端之间交换数据.我希望每个客户端都有一个唯一的证书(我将为他们生成)访问我的服务器,以便只有我认识的人才能使用它.我搜索并发现只在服务器端如何使用证书,这将使我能够建立SSL套接字连接,但我真正需要的是使用客户端服务器证书来识别连接到我的服务器的客户端.这可能使用PHP吗?

我想像客户端这样连接:

$clientCert = './clientCert.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $clientCert);
$server = stream_socket_client('ssl://IP', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
Run Code Online (Sandbox Code Playgroud)

但是服务器如何处理(识别等)此客户端证书?

希望我对我的问题很清楚.

谢谢,拉斐尔

Jon*_*Jon 1

您应该使用stream_context_set_option设置verify_peertrue; 这将要求另一方验证客户端的证书是否可信。验证是通过检查证书是否由受信任的颁发机构签名来完成的,因此您需要通过 或 选项指定可以在哪里找到颁发机构的cafile公钥capath

请注意,上述内容在服务器端(以允许您对客户端进行身份验证)客户端均适用 - 除非您明确指定,否则服务器也不会进行身份验证。