在设计用于在定制芯片上运行的java应用程序的代码行下面找到。
System.setProperty("ssl.SocketFactory.provider", "some.custom.socketFactory");
我从互联网上推断"ssl.SocketFactory. net"。"provider"是一个要在java.security.Security类中设置的属性。
我很困惑,如果设置"ssl.SocketFactory。"提供者"作为系统属性而不是安全属性会有任何区别(积极或消极),我的意思是系统和安全是彼此的子集或超集,所以谁使用"ssl.SocketFactory"并不重要。
p。史:1)芯片上的java应用程序成功地管理了与服务器进行服务器身份验证的服务器通信,但是当从更新的服务器请求客户端身份验证时,SSlSocketFactory(从经过验证的信任和密钥管理器工厂初始化的SSLContext创建)无法在服务器IP和端口上创建套接字。线程永远阻塞在。createsocket (IP,port);
2)我在网上做了很多搜索,但无法连接这些类之间的点,如果我错过或做错了什么。
Security.getProperty
和setProperty
方法在Properties
对象中设置属性,该对象对Security
类是私有的。
号我的意思是系统和安全是彼此的子集或超集。
所以
"ssl.SocketFactory.provider"
属性对谁设置并不重要。
这很重要。
默认的安全属性是从Java安装的文件中加载的;即"$JAVA_HOME/lib/security/java.security"
,其中$JAVA_HOME
表示有效的 java home。这些可以通过通过System
属性中的"java.security.properties"
属性指定的属性文件来覆盖。
所以在系统属性中设置"ssl.SocketFactory.provider"
将不起作用。但是,如果您:
- 创建安全属性覆盖文件,
- 将
"ssl.SocketFactory.provider"
属性放入其中, - 添加一个适当的
"java.security.properties"
引用覆盖文件到你的System
属性;例如使用-D
命令行选项。
那么应该起作用。
(以上细节是通过阅读Java 8源代码收集的。在其他版本中实现可能会有所不同)