我希望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提供程序?
答案 0 :(得分:0)
我已经通过创建实现"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