在PHP上使用stream_socket_accept的OpenSSL

时间:2015-07-06 12:53:35

标签: php sockets openssl

我正在尝试在套接字客户端 - 服务器应用程序中使用SSL。 出于某种原因,我收到了以下回复:

Warning: stream_socket_enable_crypto(): Unable to set private key file

我可以从文件中写入和读取。

我使用以下代码检索数据:

$socket = stream_socket_accept($this->server);
stream_set_blocking($socket, true);
stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_SERVER);
$data = fread($socket, 1024);
stream_set_blocking($socket, false);
fclose($socket);

这是我的服务器init:

$this->server = stream_socket_server(self::SERVER_ADDRESS, $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $this->ssl->getStreamContextForSSL());
stream_socket_enable_crypto($this->server, false);

上下文:

public function getStreamContextForSSL() {
    $context = stream_context_create();
    $this->setContextSSLOptions($context, array(
        'local_cert' => self::PEM_FILE,
        'passphrase' => self::PEM_PASSPHRASE,
        'allow_self_signed' => true,
        'verify_peer' => false
    ));
    return $context;
}

1 个答案:

答案 0 :(得分:2)

请务必检查您的私钥是否有效,因为OpenSSL的php实现不会告诉您,如果不是。