2016-10-25 4 views
0

Найденная ниже строка кода в приложении Java, предназначенная для работы на пользовательском чипе.Разница между System.setProperty и Security.setProperty

System.setProperty("ssl.SocketFactory.provider", "some.custom.socketFactory"); 

я заключаю из Интернета, что «ssl.SocketFactory.provider» есть свойство быть установлен на классе java.security.Security.

Я смущен, если установка «ssl.SocketFactory.provider» как свойства System вместо свойства Security делает любую разницу (положительную или отрицательную), и это правильно, я имею в виду подсистемы System и Security или супернаборы друг от друга , поэтому не имеет значения, у кого установлено свойство «ssl.SocketFactory.provider».

PS: 1) Приложение java на чипе успешно удалось связать с сервером с аутентификацией сервера, но когда клиентская аутентификация запрашивается с обновленного сервера, SSlSocketFactory (созданный из SSLContext, инициализированный с проверенными заводом Trust и Key Manager) не удалось создать сокет на серверах IP и port.The поток блокирует навсегда на .createSocket (IP, порт);

2) Я много искал в Интернете, но не смог подключить точки между этими классами, и если мне не хватает или что-то не так.

+0

Документов, кажется, говорят, чтобы использовать свойство безопасности. 'При первом вызове этого метода проверяется свойство безопасности« ssl.SocketFactory.provider ». Таким образом, вы можете быть правы. Трудно быть уверенным при работе с пользовательским оборудованием. https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLSocketFactory.html#getDefault-- – markspace

ответ

4

Методы и setProperty устанавливают свойства объекта Properties, который является закрытым для класса Security.

Я имею в виду подмножества системы и безопасности или надмножества друг друга.

No.

поэтому не имеет значения, на которых свойство "ssl.SocketFactory.provider" устанавливается.

Это имеет значение.


Свойства безопасности по умолчанию загружаются из файла в установке Java; то есть "$JAVA_HOME/lib/security/java.security", где $JAVA_HOME обозначает действующий дом java. Они могут быть переопределены через файл свойств, который указан через свойство "java.security.properties" в свойствах System.

Таким образом, установка "ssl.SocketFactory.provider" в системных целях не будет работать. Тем не менее, если вы:

  1. создать свойства безопасности переопределить файл,
  2. положить "ssl.SocketFactory.provider" недвижимость в него, и
  3. добавить соответствующий "java.security.properties" отсылая к файлу переназначения для ваших System свойств; например используя опцию командной строки -D.

тогда должен работа.


(Вышеуказанные детали, почерпнутые из чтения исходного кода Java 8. Реализация может отличаться в других версиях.)

Смежные вопросы