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)我在互联网上进行了大量搜索,但无法连接这些类之间的点,如果我遗失或做错了什么.
该Security.getProperty和setProperty方法在设置属性Properties对象,它是私有的Security类.
我的意思是系统和安全子集或彼此的超集.
没有.
所以
"ssl.SocketFactory.provider"财产设置对谁并不重要.
这非常重要.
默认安全属性是从Java安装中的文件加载的; 即"$JAVA_HOME/lib/security/java.security"where $JAVA_HOME表示有效的 java home.这些可以通过"java.security.properties"属性中的System属性指定的属性文件覆盖.
因此"ssl.SocketFactory.provider",在系统属性中设置将不起作用.但是,如果你:
"ssl.SocketFactory.provider"财产放入其中,并且"java.security.properties"为您的System属性添加适当的引用覆盖文件; 例如,使用-D命令行选项.那应该有用.
(以上详细信息是从阅读Java 8源代码中获得的.其他版本的实现可能有所不同.)