我希望TLS10使用一个定制的SSLSocketFactory,这样我就可以实现一些时髦的TLS密码组,作为安全研究的一部分。
我已经构建了一个虚拟工厂,它打印日志并将它们传递给默认的提供程序。但是,我无法让WildFly使用它。
我已经在JRE的java.security文件中添加了一个安全属性ssl.SocketFactory.provider=<my.class.name>。我将包含我的实现的JAR放在JRE的lib/ext目录中。
我已经通过编写一个小的Java测试程序测试了这一点:
public static void main(String[] args) throws Exception {
SocketFactory factory = SSLSocketFactory.getDefault();
System.out.println(factory.getClass().getCanonicalName());
}当从WildFly外部的命令行执行时,它会正确地打印我的提供程序名称。
不幸的是,WildFly似乎忽略了这个设置。我尝试在打开debug的情况下运行WildFly (将JAVA_OPTS="$JAVA_OPTS -Djavax.net.debug=ssl"添加到我的standalone.conf文件中),但是没有关于加载提供程序的错误消息。
WildFly没有配置JAVA_HOME,所以它只是使用java命令来启动服务器。
如何让SSL10使用我的WildFly提供程序?
发布于 2019-01-24 23:20:58
我已经通过创建一个实现"SSLContext.TLS"的安全提供程序解决了这个问题。这为我提供了一个钩子来拦截套接字工厂是如何构造的。
通过将此提供程序放在java.security提供程序列表的顶部,我可以截获我需要的内容并返回不同的SSLSocketFactory或SSLServerSocketFactory实例。
有用的链接:
https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider.html#Steps https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLContextSpi.html
https://stackoverflow.com/questions/54327043
复制相似问题