Кто генерирует секретный ключ для шифрования во взаимном TLS?
https://habr.com/ru/post/258285/
1. Есть приватный и публичный ключ на стороне сервера, который сгенерирован сервером заранее и используется для проверки подлинности сервера клиентом.
2. Они же используются для передачи ключа для симметричного шифрования, который сгенерирован клиентом, если для обмена ключами используется RSA
3. Но также вместо RSA может использоваться алгоритм Диффи-Хеллмана, при котором и клиент и сервер генерируют части ключа на своей стороне.
Зависит от настроек и клиента, и сервера. Обычно есть некий централизованный CA, из которого выдаются и серверные, и клиентские сертификаты, но в общем случае они могут быть из разных CA и не совпадать.

Например, я какое-то время использовал конфигурацию, где у сервера был TLS-сертификат из обычного публичного центра сертификации, а клиенту необходимо было предоставить сертификат из приватного CA. Такая схема удобна из-за того, что на стороне клиента не нужно импортировать сертификат CA, а достаточно только самого сертификата, без цепочки сертификации. Меньше проблем доверия, лучше безопасность.