Для программы, которую я пишу, я хотел бы использовать TLS (или что-то подобное) для инкапсуляции протокола моего приложения. Это сведет к минимуму объем работы, которую я должен выполнить, а также количество уязвимостей, которые я мог случайно создать.
Моя программа разработана для одноранговой связи, хотя один или несколько серверов предоставляют некоторые услуги, чтобы помочь одному пользователю найти другого (он регистрирует комбинации IP-адресов / портов), но мало что делают. Я хочу сделать эту систему очень отказоустойчивой, поэтому использование этих серверов в качестве центра сертификации недопустимо, поскольку компрометация сервера или его ключа может повлиять на слишком много пользователей. Поэтому я планирую использовать сеть доверия.
Основная проблема с использованием TLS заключается в том, что исходная спецификация TLS 1.2 (RFC 5246) не предусматривает использование сертификатов OpenPGP. Кажется, что он очень х.509 центрирован. RFC 6091, который устарел RFC 5081 и расширяет RFC 5246, предусматривает расширение для TLS, которое делает то, что я хочу. Проблема в том, что я не думаю, что BouncyCastle реализует это расширение, и я не могу найти криптографическую библиотеку Java, которая это делает. Я также не хочу писать свои собственные материалы / делать свой вклад в BC, потому что я действительно не умею делать ошибки и я очень ленив.
Другая проблема заключается в том, что BouncyCastle предоставляет «облегченный API-интерфейс TLS на стороне клиента», но поскольку это программное обеспечение является P2P, также необходим API-интерфейс на стороне сервера, чтобы я мог использовать TLS, заставляя его верить, что инициирующий узел соединение клиент. Я уверен, что после того, как рукопожатие будет завершено, оно будет таким же.
Вопросы:
Есть ли способ, которым я все еще могу использовать TLS (в чем я сильно сомневаюсь)? Существует ли такой протокол, как TLS, который предназначен для P2P, или, по крайней мере, он может функционировать таким образом (как я полагаю, может TLS), но может работать с сертификатом OpenPGP? Если это не так, должен ли я следовать идее, изложенной в этом вопросе , и реализовать свой собственный уровень, используя концепции TLS?
Ссылки на RFC: RFC 5246 и RFC 6091