我們是有個服務(wù)器需要連接外部的服務(wù)器,
之前證書是標(biāo)準(zhǔn)的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 放進(jìn)一個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ù)您提供的信息,可能有以下問題導(dǎo)致連接失?。?/p>
PEM證書格式不正確:PEM文件應(yīng)該包含完整的證書鏈和私鑰。您可以將ca.crt和client.crt合并為一個PEM文件,將client.key放在另一個PEM文件中。確保在合并過程中不會損壞證書數(shù)據(jù)或格式。您可以使用以下命令將它們合并為單個PEM文件:
cat client.crt ca.crt > client.pem
OpenSSL擴(kuò)展未啟用:您需要確保PHP安裝了OpenSSL擴(kuò)展,并在php.ini文件中啟用了它。您可以在終端上運(yùn)行以下命令來檢查OpenSSL擴(kuò)展是否已安裝:
php -m | grep openssl
如果沒有輸出,則表示OpenSSL擴(kuò)展未啟用。您需要編輯php.ini文件并取消注釋以下行:
extension=openssl
SSL連接配置錯誤:您需要確保連接配置正確,包括服務(wù)器地址、端口號和SSL選項。如果服務(wù)器使用的是自簽名證書,則需要將'allow_self_signed'選項設(shè)置為true,并將'verify_peer'和'verify_peer_name'選項設(shè)置為false。如果您不確定這些選項的含義,請查看PHP文檔以獲取更多信息。
您可以嘗試進(jìn)行以下操作來解決連接問題:
1.合并證書文件為PEM文件,并確保證書鏈和私鑰的格式正確。
如果您仍然無法解決問題,請?zhí)峁└嘣敿?xì)信息,例如錯誤消息或日志文件。