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