我在建立SSL连接时遇到问题。
显示以下警告:
警告:stream_socket_client()[function.stream-socket-client]:无法设置本地证书链文件`D:\ path \ cert.pem';在第23行的D:\ path \ testSll.php中检查您的cafile / capath设置是否包含证书及其颁发者的详细信息
警告:stream_socket_client()[function.stream-socket-client]:无法在第23行的D:\ path \ testSll.php中创建SSL句柄
警告:stream_socket_client()[function.stream-socket-client]:无法在第23行的D:\ path \ testSll.php中启用加密
警告:stream_socket_client()[function.stream-socket-client]:无法连接到第23行的D:\ path \ testSll.php中的ssl://host.tld:700(未知错误)
所以我读到了关于“无法设置本地证书链文件”的所有问题,但我找到的所有答案都不适用于我。
以下是我使用的代码:
$host = 'host.tld';
$port = 700;
$cert = dirname(__FILE__).'\\cert.pem'; //
$passe_phrase = 'pass';
$opts = array(
'ssl'=>array(
'local_cert' => $cert,
'passphrase' => $passe_phrase,
'verify_peer' => false
)
);
$context = stream_context_create($opts);
$fp = stream_socket_client('ssl://'.$host.':'.$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
if ($fp) {
echo "OK";
} else {
echo "ERROR: $errno - $errstr<br />\n";
}
证书是好的。 该脚本可以访问文件cert.pem。
我无法找到我在这里失踪的东西。
PHP版本:5.2.6
答案 0 :(得分:0)
你应该看看include details of your certificate and its issuer
。在我的情况下,我不小心删除了文件的标题。当我将其返回时,脚本连接成功。
之前:
-----BEGIN CERTIFICATE-----
MIIFCBG+gAwIBAg...
在
Bag Attributes
friendlyName: ...
localKeyID: ...
subject=...
issuer=/C=US/... CN=Apple Worldwide Developer Relations Certification Authority
-----BEGIN CERTIFICATE-----
MIIFCBG+gAwIBAg...