无法设置本地证书链文件


Unable to set local cert chain file

我在建立 SSL 连接时遇到问题。

将显示以下警告:

警告:stream_socket_client() [function.stream-socket-client]:无法设置本地证书链文件 'D:''path''cert.pem';检查您的 cafile/capath 设置是否包含证书及其颁发者的详细信息,第 23 行的 D:''path''testSll.php

警告: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

你应该

看看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...