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

时间:2016-10-25 05:09:40

标签: java sockets security ssl sslsocketfactory

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

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

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

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

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

2)我在互联网上进行了很多搜索,但无法在这些课程之间连接点,如果我遗失或做错了什么。

1 个答案:

答案 0 :(得分:5)

Security.getPropertysetProperty方法在Properties对象中设置属性,该对象是Security类专用的。

  

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

没有

  

因此设置"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命令行选项。
  4. 然后应该工作。

    (以上详细介绍了阅读Java 8源代码。其他版本的实现可能有所不同。)