У меня есть задача изменить существующее приложение с обычного TCP / IP (ServerSocket и Socket) на связь TCP / IP на основе SSL. В настоящее время сервер (ServerSocket) прослушивает порт, а клиент (Socket) открывает соединение на этом порту, и он работает нормально.
Итак, для 10 учетных записей мы развернули 10 серверных приложений (на одном сервере), которые прослушивают 10 разных портов, и соответствующие клиенты подключаются к соответствующим портам. Но теперь наше требование - добавить безопасный уровень для связи. Для этого на сервере будет установлен сертификат, и приложение всех 10 учетных записей будет прослушивать один порт 443.
Для этого я использовал приведенный ниже код, но я не могу использовать порт 443 и развернуть его для всех 10 учетных записей, поскольку порт 443 используется другим приложением на том же сервере. Подскажите, пожалуйста, как этого добиться.
SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
ssl = (SSLServerSocket) sslserversocketfactory.createServerSocket(serverPort);
Только один процесс может прослушивать порт. Если вы запускаете 10 серверных приложений, каждому нужен свой порт. Так было с HTTP и все еще так с HTTPS. Если сейчас все должно пройти через порт 443 - по какой-либо причине - вам понадобится прокси-сервер HTTP (S), который прослушивает этот порт, который затем перенаправляет запросы на конкретный порт приложения.
На практике вы не можете использовать порт 443, за исключением HTTPS-сервера, а если вы пишете HTTPS-сервер, здесь нет никаких указаний на это. Непонятно, о чем вы спрашиваете.
Проверьте, можете ли вы превратить это чистое TCP-приложение во что-то на основе http (s)
@Shihe Zhang: А какое сообщение об ошибке вы получили? -> Ожидаемое исключение привязки JVM, поскольку 443 используется другим приложением.
Итак, вам нужно выяснить, какое приложение использует этот порт. Я не думаю, что это то, что можно обойти, изменив код. Вам нужна помощь админа сервера. Скорее всего, вы в конечном итоге используете механизм обратного прокси, чтобы исправить это.
почему бы не использовать tcp-прокси / балансировщик нагрузки, например nginx? Такой прокси позаботится о завершении SSL и будет передавать запрос на правильный вышестоящий сервер без каких-либо изменений кода, требуемых в вашем Java-коде.
Вы можете осуществлять обмен TLS через любой порт, особого волшебного значения нет. Это просто вопрос использования клиентом правильного значения по умолчанию или использования чего-то вроде записей SRV в DNS. Кроме того, даже с одним IP-адресом и одним портом у вас может быть несколько «приложений» (например, веб-сайтов), просто заставив клиент использовать TLS SNI.




Я не думаю, что вы можете добиться этого только с помощью этого кода, вам нужна помощь в настройке на стороне сервера. А какой сообщение об ошибке вы получили?