无法设置本地证书链文件

时间:2016-03-03 14:18:34

标签: php ssl ssl-certificate

我在建立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

1 个答案:

答案 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...