在码头9.4 SSLContextFactory中缺少checkKeyStore()

时间:2019-05-13 18:10:37

标签: security jetty embedded-jetty jetty-9

我正在从码头this._empService.GetEmpList().subscribe( data => { this.empListDataSource = new MatTableDataSource<empToShow>(Object.values(data)) this.empListDataSource.paginator = this.paginator } ) 迁移到9.0 显然,从9.4

中删除了SSLContextFactory中的以下方法

9.3.0

我检查了api文档,但没有得到任何替代,也没有在public void checkKeyStore()中弃用,而是在9.2.x中直接将其删除。 我不是安全专家,但是这是我的代码,我不确定在9.3.0

中该如何解决。
9.4.x

1 个答案:

答案 0 :(得分:1)

在Jetty 9.0.0到9.2.0中checkKeyStore()的作用仅仅是试图从磁盘加载密钥库。对SslContextFactory的任何其他影响都将视为错误。

这是您的替代实现。

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.ssl.SslContextFactory;

private static void check(SslContextFactory ssl) throws IOException
{
    if (ssl.getKeyStore() == null) // too late, already loaded?
    {
        if (StringUtil.isNotBlank(ssl.getKeyStorePath())) // no path, no check
        {
            Path keystorePath = Paths.get(ssl.getKeyStorePath());
            try (InputStream inputStream = Files.newInputStream(keystorePath);
                 OutputStream outputStream = new ByteArrayOutputStream())
            {
                IO.copy(inputStream, outputStream);
            }
        }
    }
}

Jetty 9.3.0中引入了对SNI的支持后,checkKeyStore()方法在2015年4月被删除,该方法引入了具有SslContextFactory实现的层次结构的功能。

checkKeyStore()提供的行为被转移到loadKeyStore()方法,该方法总是在doStart()的{​​{1}}期间调用。

简而言之,在Jetty 9.0.0 SslContextFactory中总是运行,现在在Jetty 9.4.18中,它的行为始终保持静止,但是在另一个地方。新行为还将检查TrustStore,您的SNI设置,密码套件选择,协议选择等。新技术的作用远远超过旧技术。

由于您使用的是checkKeyStore(),因此考虑而不是检查embedded-jetty,只需让生命周期在SslContextFactory调用中失败即可。

注意:对于server.start(),请确保设置WebAppContext以允许其报告整个生命周期中的故障。