Я распространяю настольное приложение Java, которое должно взаимодействовать с некоторыми RESTful API, обслуживаемыми встроенным Tomcat в веб-приложении Spring Boot.
Я планировал использовать самозаверяющий сертификат для связи между рабочим столом и сервером. Но если позже я захочу открыть некоторые общедоступные веб-страницы, требующие шифрования, я считаю, что для этого мне понадобится коммерческий сертификат.
Можно ли использовать несколько сертификатов в Tomcat? Если да, то как сервер определяет, какие запросы зашифрованы каким сертификатом?
Сам протокол не позволяет размещать два сертификата SSL на одном и том же порту на одном IP.
Из ИНСТРУКЦИЯ по настройке Tomcat SSL:
Использование виртуальных хостов на основе имен в защищенном соединении может быть проблематичным. Это конструктивное ограничение самого протокола SSL. Подтверждение связи SSL, при котором обозреватель клиента принимает сертификат сервера, должно произойти до обращения к HTTP-запросу. В результате информация запроса, содержащая имя виртуального хоста, не может быть определена до аутентификации, и поэтому невозможно назначить несколько сертификатов одному IP-адресу.
Электронное письмо в список пользователей Tomcat состояния что вы можете сделать это с помощью «Коннектора и связанного хранилища ключей для каждого IP (или IP / порта), который вы хотите защитить».
Это позволит вам работать на отдельных портах (например, 0.0.0.0:443
публично и 0.0.0.0:4443
для вашего API) и / или адреса (например, 192.0.2.1:443
публично и 192.0.2.2:443
для вашего API).
Теоретически возможно сделать это различие на интерфейсе или на отдельном интерфейсе.CIDR уровень до подтверждения SSL (например, трафик от 192.168.0.1/16
получает один сертификат, другой трафик получает другой сертификат), но я не знаю ни одного программного обеспечения, которое бы это делало; вам нужно будет использовать переадресацию портов через брандмауэр.
Чтобы сделать это с помощью простой переадресации портов: перенаправьте соединения из вашей внутренней инфраструктуры через порт 443 на локальный порт 4443 и обслуживайте свой внутренний сертификат SSL на порту 4443 в Tomcat.
Примечание: я никогда не слышал об этом.