1

在设计为在定制芯片上运行的 java 应用程序中的以下代码行中找到。

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

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

如果将“ssl.SocketFactory.provider”设置为系统属性而不是安全属性会产生任何差异(正面或负面),我感到很困惑,这是正确的,我的意思是系统和安全子集或彼此的超集,所以它确实设置“ssl.SocketFactory.provider”属性的对象无关紧要。

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

2)我在互联网上进行了大量搜索,但无法连接这些课程之间的点以及我是否遗漏或做错了什么。

4

1 回答 1

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 源代码收集的。在其他版本中实现可能会有所不同。)

于 2016-10-25T05:29:44.323 回答