У меня есть Java-апплет, который загружает некоторые предварительно установленные расширения собственного кода для отображения пользовательского содержимого в браузере. Часть этого контента может включать собственный код, который будет загружен JVM. Очевидно, что это проблема безопасности. Я бы хотел, чтобы весь контент поступал только с авторизованных серверов.
Путь, по которому я следовал, - создать хранилище ключей, содержащее только один SSL-сертификат. Я установил расположение хранилища ключей и пароль и включил отладочный вывод.
System.setProperty("javax.net.ssl.keyStore", "C:\\keys\\keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
System.setProperty("javax.net.debug", "ssl");
У меня сложилось впечатление, что это будет означать, что JVM будет иметь доступ только к одному файлу хранилища ключей и, следовательно, к одному ключу внутри него. Фактически, в отладочной информации SSL перечислено что-то вроде 75 ключей CA в дополнение к одному ключу, который я добавил. Понятно, что это не помешает никому отправлять нам ненадежный код.
Есть ли способ указать системе SSL использовать только один сертификат? Должен ли я использовать совершенно другой подход?
Обновление:
Изменение файла cacerts на самом деле не вариант здесь. JVM должна продолжать нормально функционировать для других приложений, использующих ее. Есть ли способ во время выполнения выбрать, чтобы не загружать этот файл? Я смотрю на классы TrustManager и KeyManager, но не совсем понимаю, как их использовать.