有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在WildFly 10中使用自定义SSLSocketFactory

我想让WildFly 10使用定制的SSLSocketFactory,这样我就可以实现一些时髦的TLS密码套件,作为安全研究的一部分

我建立了一个虚拟工厂,打印日志并将其传递给默认的提供者。然而,我无法让WildFly使用它

我在java中添加了一个安全属性ssl.SocketFactory.provider=<my.class.name>。我的JRE中的安全文件。我已将包含我的实现的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) 个答案

  1. # 1 楼答案

    我通过创建一个实现"SSLContext.TLS"的安全提供程序解决了这个问题。这为我提供了一个钩子来拦截套接字工厂是如何构建的

    通过将此提供程序放在java的顶部。安全提供者列表,我可以拦截我需要的东西并返回不同的SSLSocketFactorySSLServerSocketFactory实例

    有用的链接:

    https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider.html#Stepshttps://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLContextSpi.html