在WildFly 10中使用自定义SSLSocketFactory

时间:2019-01-23 12:14:56

标签: java ssl jboss wildfly

我希望WildFly 10使用定制的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似乎忽略了此设置。我尝试在启用调试的情况下运行WildFly(将JAVA_OPTS="$JAVA_OPTS -Djavax.net.debug=ssl"添加到了standalone.conf文件中),但是没有关于加载提供程序的错误消息。

WildFly配置为没有JAVA_HOME,因此仅使用java命令来启动服务器。

如何让WildFly 10使用我的SSL提供程序?

1 个答案:

答案 0 :(得分:0)

我已经通过创建实现"SSLContext.TLS"的安全提供程序来解决了这个问题。这为我提供了一个钩子,以拦截套接字工厂的构造方式。

通过将此提供程序放在java.security提供程序列表的顶部,我可以截取所需的内容并返回不同的SSLSocketFactorySSLServerSocketFactory实例。

有用的链接:

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