Вы инициализируете свой SSLContext
с помощью массива null
KeyManager
.
Ключ-менеджер - это то, что обрабатывает сертификат сервера (на стороне сервера), и это то, вероятно, для установки при использовании javax.net.ssl.keyStore
.
Однако, как описано в Справочном руководстве JSSE , использование null
для первого параметра не делает то, что вам кажется подумать, что это делает:
Если параметр KeyManager [] имеет значение NULL, то для этого контекста будет определен пустой KeyManager. Если параметр TrustManager [] равен NULL, установленным поставщикам безопасности будет поиск наивысшей приоритетной реализации TrustManagerFactory, из которой будет получен соответствующий TrustManager. Аналогично, параметр SecureRandom может быть нулевым, и в этом случае будет использоваться реализация по умолчанию.
blockquote>Пустое
KeyManager
не содержит сертификатов RSA или DSA. Поэтому все блоки шифрования по умолчанию, которые будут полагаться на такой сертификат, будут отключены. Вот почему вы получаете все эти сообщения « Игнорирование недоступных сообщений шифра », что в конечном итоге приводит к сообщению об « без шифрования вообще ».Если вы хотите, чтобы ваше хранилище ключей использовалось в качестве хранилища ключей, вам нужно загрузить его и инициализировать KeyManagerFactory с помощью него:
KeyStore ks = KeyStore.getInstance("JKS"); InputStream ksIs = new FileInputStream("..."); try { ks.load(ksIs, "password".toCharArray()); } finally { if (ksIs != null) { ksIs.close(); } } KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory .getDefaultAlgorithm()); kmf.init(ks, "keypassword".toCharArray());
Использовать
kmf.getKeyManagers()
в качестве первого параметра дляSSLContext.init()
.Для двух других параметров, поскольку вы явно не запрашиваете аутентификацию клиентского сертификата, вы должны оставить доверительный менеджер значением по умолчанию (
null
) вместо копирования / вставки доверительного менеджера, который является потенциальную причину уязвимости, и вы также можете использовать значение по умолчаниюnull
SecureRandom
.
Они заставляют предупреждение замолчать, что Eclipse испускает, когда он встречается со строковыми литералами (и был настроен для жалобы).
идея состоит в том, что сообщения UI не должны быть встроены как строковые литералы, а скорее получены от файла ресурсов (так, чтобы они могли быть переведены, проверены, и т.д.). Следовательно, Eclipse может быть настроен для обнаружения строковых литералов, так, чтобы у Вас случайно не было отпуска невоплощенными строками UI в коде; однако, существуют строки, которые не должны быть воплощены (такие как regexps) и так,//, $NON-NLS-1$ дает Вам способ передать тот факт к компилятору.
Это используется Eclipse, чтобы указать, что строка не должна быть переведена, вероятно, потому что это не будет замеченным пользователями приложения.
Строка не переводима. Это говорит редактору Eclipse не отмечать строку, как не снабжено. Это важно для многоязычных приложений.
Это говорит компилятору не жаловаться на неизвлеченную строку, и что это не требует локализации.