Сначала немного теории.
CA - Certificate Authority - доверенный удостоверящий центр, который подписывает сертификаты.
У каждой стороны есть секретный ключ, который она никому не показывает, и публичный ключ, он же сертификат. Чтобы подтвердить, что сертификат принадлежит обеим сторонам, эти сертификаты должны иметь подпись доверенного лица, в данном случае CA.
Обычно мы привыкли, что в SSL только серверная сторона доказывает свою подлинность. Идея mTLS в том, что обе стороны должны предоставить свой публичный сертификат, подписанный CA. Тогда если сервер доверяет CA, он будет доверять и клиентскому сертификату.
Но публичный ключ не имеет смысла без приватного. А в куске кода в вопросе он вообще не встречается.
Итак, что нам нужно для установления сессии?
1. Сертификат CA - kbs_ca.crt (скорее всего, можно склеить оба CA - промежуточный и корневой - в один файл);
2. Приватный ключ клиента, который он будет использовать для шифрования - private.key;
3. Соответствующий приватному публичный ключ-сертификат, который клиент будет сообщать серверу - public.cer.
Я ввёл в гугл "php curl mtls" и в первой же ссылке есть пример кода:
https://smallstep.com/hello-mtls/doc/client/php
В примере, конечно, нет пароля от ключа, но справка подсказывает, что это опция CURLOPT_SSLKEYPASSWD.