【问题标题】:Difference between System.setProperty and Security.setPropertySystem.setProperty 和 Security.setProperty 之间的区别
【发布时间】:2016-10-25 05:09:39
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 文档似乎确实说要使用安全属性。 The first time this method is called, the security property "ssl.SocketFactory.provider" is examined. 所以你可能是对的。不过,在处理定制硬件时很难确定。 docs.oracle.com/javase/8/docs/api/javax/net/ssl/…

标签: java sockets security ssl sslsocketfactory


【解决方案1】:

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

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

没有。

所以"ssl.SocketFactory.provider" 属性设置在谁身上并不重要。

这很重要。


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

所以在系统属性中设置"ssl.SocketFactory.provider" 将不起作用。但是,如果您:

  1. 创建一个安全属性覆盖文件,
  2. "ssl.SocketFactory.provider" 属性放入其中,然后
  3. 将引用覆盖文件的适当"java.security.properties" 添加到您的System 属性;例如使用-D 命令行选项。

那么应该工作。


(以上细节是通过阅读Java 8源代码收集到的。在其他版本中实现可能会有所不同。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    相关资源
    最近更新 更多