我目前正在使用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);
但是服务器如何处理(识别等)此客户端证书?
希望我对我的问题很清楚。
提前致谢, 圣拉斐尔
答案 0 :(得分:1)
您应该使用stream_context_set_option
将verify_peer
设置为true
;这将要求另一方验证客户的证书是否可信。验证是通过检查证书是否由受信任的机构签名来完成的,因此您需要指定通过cafile
或capath
选项找到权限的公钥的位置。
请注意,在服务器端(允许您对客户端进行身份验证)和在客户端上也是如此 - 除非您明确指出,否则服务器也不会进行身份验证。