gpt4 book ai didi

java - 将 JCEKS keystore 加载到 Vert.x

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:03 28 4
gpt4 key购买 nike

我正在尝试为我的客户端/服务器通信提供使用 WebSockets 的选项。我有一些使用 Vert.x 的经验,并选择将其用作此框架(注意:我不拘泥于此!)。

双向通信正常,这不是问题。

我正在尝试使用 TLS 来保护连接。当我尝试将我成功用于 TCP 连接的 keystore 加载到 Vert.x 时,会出现问题。在 Web 套接字上调用 listen() 时,出现以下异常和堆栈跟踪:

io.vertx.core.VertxException: java.io.IOException: Invalid keystore format

at io.vertx.core.net.impl.SSLHelper.createContext(SSLHelper.java:297)
at io.vertx.core.net.impl.SSLHelper.getContext(SSLHelper.java:457)
at io.vertx.core.net.impl.SSLHelper.validate(SSLHelper.java:482)
at io.vertx.core.http.impl.HttpServerImpl.listen(HttpServerImpl.java:243)
at io.vertx.core.http.impl.HttpServerImpl.listen(HttpServerImpl.java:211)
at example.VertxSslTest.testServerSocket(VertxSslTest.java:50)
<22 internal calls>
Caused by: java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
at java.security.KeyStore.load(KeyStore.java:1445)
at io.vertx.core.net.impl.KeyStoreHelper.loadJKSOrPKCS12(KeyStoreHelper.java:269)
at io.vertx.core.net.impl.KeyStoreHelper.create(KeyStoreHelper.java:83)
at io.vertx.core.net.KeyCertOptions.getKeyManagerFactory(KeyCertOptions.java:43)
at io.vertx.core.net.impl.SSLHelper.getKeyMgrFactory(SSLHelper.java:302)
at io.vertx.core.net.impl.SSLHelper.createContext(SSLHelper.java:255)
... 27 more

我的简单测试设置,只是尝试打开一个套接字:

public void testServerSocket() throws Exception {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL url = cl.getResource("keystore.ks");
Path path = Paths.get(url.toURI());
byte[] keystoreBytes = Files.readAllBytes(path);

Buffer buffer = Buffer.buffer(keystoreBytes);
HttpServerOptions options = new HttpServerOptions()
.setSsl(true)
.setKeyStoreOptions(new JksOptions()
.setValue(buffer)
.setPassword("password"));
Vertx vertx = Vertx.vertx();

vertx.createHttpServer(options)
.websocketHandler(this::connected)
.listen(8080);
}

我找不到任何关于 Vert.x 期望 keystore 的结构、它假定的内容等的任何信息。也无法弄清楚为什么这个 keystore 不被接受。

此外,附带说明一下,为什么 Vert.x 不允许传递 KeyStore 对象。

最佳答案

看起来您的 keystore 格式不正确,异常实际上是由 Vertx 中使用的 KeyStore 本身抛出的。确保您也可以先从 Java 打开 keystore 字节。

关于java - 将 JCEKS keystore 加载到 Vert.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52779875/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com