Я работаю над внедрением TLS для клиент-серверного приложения. Но проблема в том, что и клиент, и сервер находятся на одном сервере: оба взаимодействуют только с номером порта.
Итак, каким должно быть общее имя (CN) для агента и сервера? Если я использую другое имя, отличное от IP-адреса системы, я получаю предупреждение о «предупреждении о ненадежном сертификате». Если я использую то же имя CN, приложение не работает.
В TLS, сертификат клиента и сертификат сервера живут в совершенно разных мирах:
Между этими двумя сертификатами нет никакой связи. Нет никакого свойства, которое связывает их вместе. Эти два сертификата принадлежат, отправляются, принимаются и обрабатываются разными организациями.
Чтобы соединение TLS было успешным, сертификат сервера должен нравиться клиенту; в частности, клиент обычно ожидает предполагаемое имя сервера появиться где-нибудь в сертификате, либо в Subject Alt Name
extension или, если такого расширения нет, в Common Name. Это указано в RFC 2818, раздел 3.1. В основном это применимо, если соединение осуществляется через https://
URL-адрес (имя сервера, которое отображается в URL-адресе, также должно быть в сертификате сервера). Примечательно, что этот матч проводится название, а не по IP-адресу; если клиент и сервер находятся на одном компьютере, тогда URL-адрес должен использовать имя «localhost» (а не IP-адрес 127.0.0.1), а «localhost» должен быть частью сертификата сервера. Конечно, это не единственное условие; клиент также должен иметь возможность проверить сертификат относительно доверенного центра.
Благодаря моим способностям в haruspicy, я могу выдвинуть гипотезу, что ваше приложение находит сертификаты, которые оно использует, через общее имя, поэтому, если у вас есть два сертификата с одинаковым общим именем, клиент или сервер (или оба) могут выбрать " неправильный".