求弄过国密SSL的大佬给小弟指导一下

azafek

我们是有个服务器需要连接外部的服务器,
之前证书是标准的SSL证书,现在他们换成了 国密的SSL(BABASSL)

给了三个证书文件,一个ca.crt 一个 client.crt 一个 client.key
我看client.key里放的是
-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,D68967FCB465313F
xxxxxx
-----END EC PRIVATE KEY-----

目前问题就是我吧ca.crt和client.crt和client.key 放进一个PEM里,连接不上提示我
stream_socket_enable_crypto(): Unable to set local cert chain file

我的连接方式是
$context_option = [
'ssl' => [
'local_cert' => $this->sslcert, //就是我上面说的pem证书
'passphrase' => '',
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
]
];
}
//实例化连接
$conn = new AsyncTcpConnection('ssl:xxxxxxxxx:1234', $context_option);

请教懂行的怎么才能连的上,需要PHP本身装什么拓展吗?
@walkor 求大佬解惑

741 2 0
2个回答

testmoon

我也碰到类似问题,请问你解决了么?

  • 暂无评论
何烈山

根据您提供的信息,可能有以下问题导致连接失败:

PEM证书格式不正确:PEM文件应该包含完整的证书链和私钥。您可以将ca.crt和client.crt合并为一个PEM文件,将client.key放在另一个PEM文件中。确保在合并过程中不会损坏证书数据或格式。您可以使用以下命令将它们合并为单个PEM文件:

cat client.crt ca.crt > client.pem

OpenSSL扩展未启用:您需要确保PHP安装了OpenSSL扩展,并在php.ini文件中启用了它。您可以在终端上运行以下命令来检查OpenSSL扩展是否已安装:

php -m | grep openssl

如果没有输出,则表示OpenSSL扩展未启用。您需要编辑php.ini文件并取消注释以下行:
extension=openssl
SSL连接配置错误:您需要确保连接配置正确,包括服务器地址、端口号和SSL选项。如果服务器使用的是自签名证书,则需要将'allow_self_signed'选项设置为true,并将'verify_peer'和'verify_peer_name'选项设置为false。如果您不确定这些选项的含义,请查看PHP文档以获取更多信息。

您可以尝试进行以下操作来解决连接问题:

1.合并证书文件为PEM文件,并确保证书链和私钥的格式正确。

  1. 检查PHP是否安装了OpenSSL扩展,并在php.ini文件中启用了它。
  2. 重新检查SSL连接配置,确保所有选项都正确设置。

如果您仍然无法解决问题,请提供更多详细信息,例如错误消息或日志文件。

  • 暂无评论
年代过于久远,无法发表回答
🔝