короче. есть одноранговая сеть из нод, которые общаются по шифрованным каналам. шифрование на openssl, tls1.3 протокол. нода может как принимать тлс - коннекты, так и сама коннектиться к другим нодам. для простоты эксперимента я сделал самоподписанные сертификаты на общем приватном ключе для каждой ноды. ну как бы не мудрствуя лукаво, на основании общей логики, без особой читки openssl доков.
по моему предположению нода-клиент должна была коннектиться к ноде серверу, сервер должен дать свой сертификат, клиент его проверяет, убеждаясь в валидности сервера, сервер запрашивает сертификат клиента, проверяет, убеждается в валидности клиента и соединение поднимается.
все работает на одной машине и в качестве валидных сертификатов используется одна общая дира, разумеется хешированная c_rehash. заметим, что все сертификаты на одном ключе.
вот тут начинается какая-то пурга. сервер принимает от клиента сертификат и гнусно ругается -
The passed certificate is self-signed and the same certificate cannot be found in the list of trusted certificates.
это при том,что все сертификаты лежат в одной дире и не найти его он не может. раз уж свой нашел, то и клиентский найдет. или тут ошибка не вполне корректно выводится, или вообще нельзя делать самоподписанные сертификаты на общем ключе, класть их в трастед диру и на этом пытаться поднять tls соединения.
то есть первая мысль тут - вообще нельзя так делать, а делать самоподписанный рутовый сертификат, от него городить сертификаты нод, и в качестве доверенного сертификата давать рутовый, а раз сертификаты нод им подписаны, то все проверки будет нормально проходить?
и вообще - можно ли на openssl соединить две ноды, имея только общий ключ и по самоподписанному сертификату на этом ключе у каждой?