我們是有個服務器需要連接外部的服務器,
之前證書是標準的SSL證書,現(xiàn)在他們換成了 國密的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 求大佬解惑
根據(jù)您提供的信息,可能有以下問題導致連接失敗:
PEM證書格式不正確:PEM文件應該包含完整的證書鏈和私鑰。您可以將ca.crt和client.crt合并為一個PEM文件,將client.key放在另一個PEM文件中。確保在合并過程中不會損壞證書數(shù)據(jù)或格式。您可以使用以下命令將它們合并為單個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文件,并確保證書鏈和私鑰的格式正確。
如果您仍然無法解決問題,請?zhí)峁└嘣敿毿畔ⅲ珏e誤消息或日志文件。