Действительно, личный ключ клиента (соответствующий сертификату клиента) - это то, что используется для подписи, и он не собирается покидать браузер. Эти операции необходимо выполнять в браузере клиента, а не на стороне PHP (сервера).
К сожалению, не существует универсального способа выполнения криптографических операций (и доступа к закрытому ключу) в разных браузерах.
Вы можете посмотреть на это, чтобы начать с: https://developer.mozilla.org/en/JavaScript_crypto#Signing_text
Кроме того, вы можете попробовать запустить приложение из браузера (например, Java WebStart), хотя это не обязательно упрощает доступ к закрытому ключу и сертификату, которые находятся в браузере.