gpt4 book ai didi

php - OpenSSL 错误 - 握手失败

转载 作者:搜寻专家 更新时间:2023-10-31 20:42:05 24 4
gpt4 key购买 nike

在我向 API 发出的每秒请求中,我都会收到此错误!?

API 的后端是我自己的服务器之一,我已经为自己设置了自签名 SSL 证书

这里发生了什么!?它不能是 SSL 证书,因为它在某些情况下有效

Warning:  fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in

API请求码

$Request = new Request();
$Request->host = $host;
$Request->api_secret = 'asdf39Sf3D';
$Request->send($url, $params);
echo $Request->get_result();

class Request {
public $host;
public $api_secret;

public $boundary;
public $body;

private $response;
private $url;

const SSL = true;

public function send($url, $post_vars=array()){
$this->url = $url;

$crlf = "\r\n";

$host = $this->host;
$port = 80;

if(self::SSL){
$host = 'ssl://'.$this->host;
$port = 443;
}

if($this->body){
$body = $this->body;
}
else{
$post_vars['__api_hash'] = $this->generate_hash($this->url);
$body = http_build_query($post_vars);
}

$content_length = strlen($body);

$max_post = 1024 * 1024 * 20;
if($content_length > $max_post){
throw new Exception("Max post size exceeded");
}

if($fp = fsockopen($host, $port, $errno, $errstr, 20)){
fwrite($fp, 'POST '.substr($this->url, strlen($this->host)).' HTTP/1.1'.$crlf
.'Host: '.$this->host.$crlf
.($this->body ? 'Content-type: multipart/form-data; boundary='.$this->boundary : 'Content-Type: application/x-www-form-urlencoded').$crlf
.'Content-Length: '.$content_length.$crlf
.'Connection: Close'.$crlf.$crlf
.$body);

while($line = fgets($fp)){
if($line !== false){
$this->response .= $line;
}
}

fclose($fp);
}
else{
throw new Exception("$errstr ($errno)");
}
}

public function get_response(){
return $this->response;
}

public function get_result(){
list($header, $content) = explode("\n\n", str_replace("\r\n", "\n", $this->response));

preg_match('/^HTTP\/[\d\.]+ (\d+)/', $header, $matches);
switch($matches[1]){
case 404:
throw new Exception('HTTP 404 '.$this->url);
}

return json_decode($content, true);
}

public function generate_hash(){
return sha1($this->url.$this->api_secret);
}
}

最佳答案

有一个广为人知的 SSL/TLS renegotiation issue在 2009 年。您可能会看到添加代码以防止不安全的重新协商的结果。如果通信的一侧被修补以解决不安全的重新协商问题,那么这也可能导致您看到的错误。双方都需要有 SSL 的补丁版本或两者都未打补丁。来自OpenSSL changelog ,看起来您至少需要 v0.9.8m

查看Wamp2 and "The ordinal 942 could not be located in the dynamic link library LIBEAY.dll"您的 WAMP 附带的 OpenSSL 版本可能有问题。

关于php - OpenSSL 错误 - 握手失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19787346/

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