System.setProperty和Security.setProperty之间的区别

Che*_*wda 0 java sockets security ssl sslsocketfactory

在设计为在自定义芯片上运行的Java应用程序的下面的代码行中找到.

System.setProperty("ssl.SocketFactory.provider", "some.custom.socketFactory");
Run Code Online (Sandbox Code Playgroud)

我从互联网上推断"ssl.SocketFactory.provider"是要在java.security.Security类上设置的属性.

如果将"ssl.SocketFactory.provider"设置为System属性而不是Security属性会产生任何差异(正面或负面)并且是正确的,我感到很困惑,我的意思是系统和安全子集或彼此的超集,所以它确实无论是谁设置了"ssl.SocketFactory.provider"属性.

PS:1)芯片上的Java应用程序成功地通过服务器身份验证与服务器通信,但是当从更新的服务器请求客户端身份验证时,SSlSocketFactory(使用经过验证的Trust和Key Manager工厂初始化的SSLContext创建)无法创建套接字在服务器IP和端口.线程永远阻塞.createSocket(IP,端口);

2)我在互联网上进行了大量搜索,但无法连接这些类之间的点,如果我遗失或做错了什么.

Ste*_*n C 5

Security.getPropertysetProperty方法在设置属性Properties对象,它是私有的Security类.

我的意思是系统和安全子集或彼此的超集.

没有.

所以"ssl.SocketFactory.provider"财产设置对谁并不重要.

这非常重要.


默认安全属性是从Java安装中的文件加载的; 即"$JAVA_HOME/lib/security/java.security"where $JAVA_HOME表示有效的 java home.这些可以通过"java.security.properties"属性中的System属性指定的属性文件覆盖.

因此"ssl.SocketFactory.provider",在系统属性中设置将不起作用.但是,如果你:

  1. 创建安全属性覆盖文件,
  2. "ssl.SocketFactory.provider"财产放入其中,并且
  3. "java.security.properties"为您的System属性添加适当的引用覆盖文件; 例如,使用-D命令行选项.

应该有用.


(以上详细信息是从阅读Java 8源代码中获得的.其他版本的实现可能有所不同.)