问题标签 [tls1.3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
529 浏览

openssl - OpenSSL 的内部客户端会话缓存的目的是什么?

我正在对客户端 SSL 应用程序进行更改以支持 TLSv1.3。为了支持会话重用,我调用SSL_CTX_sess_set_new_cb注册一个回调,OpenSSL 在与服务器协商新会话时调用该回调。在此回调中,我的应用程序将会话保存在应用程序的会话缓存中,以便可以在以后的连接中重用该会话。

但是,仅当启用 OpenSSL 的内部客户端会话缓存时,OpenSSL 才会调用我的回调 [1]。这是通过以下方式完成的:

但是现在有一个问题,现在有两个会话缓存复制相同的会话:我的应用程序的“外部”缓存和 OpenSSL 的内部缓存。消除这种重复会很好,但是需要两个缓存。需要内部缓存来启用我的回调函数(根据 OpenSSL 的限制),并且需要外部缓存,因为这是我的应用程序可以查找会话并通过SSL_set_session函数重用它的唯一方法。事实上,在使用内部缓存时,这似乎是一个普遍的问题。根据手册页SSL_CTX_set_session_cache_mode,在SSL_SESS_CACHE_CLIENT[2] 部分下:

由于 OpenSSL 库没有可靠的方法来知道是否应该重用会话或选择哪个会话(由于抽象 BIO 层,SSL 引擎没有关于连接的详细信息),应用程序必须选择要使用的会话通过使用 SSL_set_session(3) 函数重用。

据我了解,这意味着:

  • 客户端应用程序必须完成SSL_SESSION*向 OpenSSL 提供重用会话的工作。即,OpenSSL 无法自行决定是否重用客户端会话——即使该会话存在于其内部缓存中。
  • 因此,该指针必须来自某个外部缓存或存储,而不是内部客户端会话缓存。

这让我想知道除了作为启用会话回调的手段之外,启用内部客户端会话缓存的合法用例是什么。例如,是否存在启用内部缓存但没有外部缓存或存储的情况?是否存在在不使用会话回调函数时启用内部缓存有意义的情况?为了清楚起见,我只谈论客户端应用程序。

[1] https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_sess_set_new_cb.html

[2] https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_session_cache_mode.html

0 投票
0 回答
58 浏览

ssl - 关闭已调用 SSL_shutdown 的文件描述符后,如何防止 TCP 重置?

我正在使用 OpenSSL 1.1.1 为以前通过普通 TCP 与服务器通信的用 C 语言编写的客户端添加 TLS 1.3 支持。设置、握手、证书身份验证和与服务器的通信正确进行。

当我尝试关闭文件描述符时,问题就来了。TCP 代码只是简单地调用close(fd). 我添加了SSL_shutdown(ssl)SSL_free(ssl)(其中 ssl 是 SSL 对象)。现在,如果我执行 a close(fd),我会看到 3 个 TCP RST 从客户端发送到服务器。另一方面,如果我做 a shutdown(fd, SHUT_RDWR),这些 RST 不会发生,可能是因为 FD 还在。我不相信这些 RST 是在添加 TLS 支持之前发生的。我知道这shutdown()只会阻止数据发送,实际上并不会破坏 fd。我们想防止 fd 泄漏。我试过打电话shutdown(fd, SHUT_RDWR)然后打电话close(fd),但同样的事情发生了。我也试过:

这样做的正确方法是什么?

0 投票
1 回答
296 浏览

c++ - 如何在 C/C++ 中使用 OpenSSL 创建 TLS 1.3 CertificateVerify 消息?

我需要自己实现 TLS 1.3 协议,使用 OpenSSL 作为加密后端。我卡在服务器 CertificateVerify 消息上 - 不知道如何创建它。这是git 中的代码和一些文件(单个 cpp 文件,216 行代码,但只关注main())。“文件”文件夹中的所有二进制消息都是由 openssl s_server 应用程序生成的,并且还有参考 CertificateVerify 消息,我需要使用 openssl 函数手动重现该消息(参见代码中的注释)。

请帮助我构建一个有效的 openssl 方法调用堆栈,以使“我的 CertificateVerify”与参考方法匹配(并了解 RSA-PSS 的工作原理)。

0 投票
1 回答
42 浏览

ssl - WolfSSL:由于构建(cmake)的配置问题导致恢复会话失败

我正在使用Ubuntu 20.04机器和CLion IDE 2020.3.2,我想使用 WolfSSL 创建一个需要 TLS1.3 实现的应用程序

使用 CLion,我克隆了官方存储库https://github.com/wolfSSL/wolfssl.git。CLion 自动构建了项目,我能够\wolfssl\examples完美运行。因此,恢复会话不起作用。我使用以下参数运行服务器/客户端:client/server -v 4 -r 并且我从客户端获取此输出:didn't reuse session id!!!我可以从 Wireshark 验证没有恢复,只是再次握手。

在我所做的另一个构建中,cmake我使用的不是(这是 CLion 的默认值)我make设法正确运行恢复,但为此我必须在构建之前添加配置此命令:./configure --enable-all“启用所有 wolfSSL 功能,不包括SSL v3"。

--enable-all我应该在我的 Cmake 配置中使用的等效命令是什么?或者我应该怎么做才能正确实现恢复?

我尝试-DWOLFSSL_ALL -DENABLE_ALL了其他人,但没有成功。我尝试分别包括其中的许多,以找出哪个是启用恢复的,但还没有。

0 投票
1 回答
251 浏览

tls1.2 - 在 vert.x Web 应用程序中,如何在 Web 应用程序中启用 TLS 1.3

在 vert.x Web 应用程序中,是否有人偶然知道如何添加 TLS 1.3 并禁用默认使用的所有先前版本的 TLS(TLS 1.1、TLS 1.2?非常感谢您的帮助。

0 投票
1 回答
220 浏览

erlang - 带有 ED25519 证书文件的 Erlang TLS

我正在使用裸 Erlangssl:listen/2函数创建服务器代码。我想使用 ED25519 算法使用 TLS 证书,但服务器在握手时崩溃。通过挖掘 Erlang 代码,似乎 TLS 不支持此算法(它在此功能上崩溃:https ://github.com/erlang/otp/blob/master/lib/public_key/src/pubkey_cert_records.erl# L109 )。

这是正确的还是我做错了什么?有没有办法启用对它的支持?一些解决方法?

作为参考,这是我生成证书的方式:

这是我得到的崩溃数据:

而且我的代码与 RSA 证书完美配合。

谢谢你的帮助

0 投票
1 回答
351 浏览

java-8 - 更新 Fuse 以获得 TLS v1.3

我是 JBoss Fuse 服务器的新手。我们使用的 Fuse 服务器版本是 7.2。根据位置undertow.xml文件${karaf.home}/etc,我们目前支持TLSv1,TLSv1.1TLSv1.2. 要求也是添加更高版本(TLSv1.3在本例中)。我想检查其先决条件和可行性方面。

另外,我无法确定 Fuse 7.2 是否支持TLSv1.3

我们正在使用 Java 8。

非常感谢任何可以引导我的信息/方向。

0 投票
0 回答
344 浏览

java - 仅在 AIX 7.1 上为 IBM SDK 8 和 Tomcat 7.0.108 启用 TLS 1.3

我们只想在 AIX 7.1 上为 IBM SDK8(服务刷新 6,修订包 25)和 Tomcat 7.0.108 启用 TLSv1.3。

我在 Tomcat 的 server.xml 中设置了 sslEnabledProtocols="TLSv1.3" ,我收到以下错误:

我已按照此网站上的说明操作并尝试了所有标志,但上述错误仍然存​​在: https ://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.security.component.80 .doc/security-component/jsse2Docs/enablingtls.html

如果我在 Tomcat 的 server.xml 中设置 sslEnabledProtocols="TLSv1.2,TLSv1.3",我看不到错误,但客户端浏览器 (Chrome) 连接到 TLSv1.2 而不是 TLSv1.3。

0 投票
2 回答
732 浏览

c - 如何使 OpenSSL C 服务器只支持 TLS 1.3?

我们有一个使用 OpenSSL API 的 Linux C 程序,充当 TLS 服务器。它目前的代码如下:

OpenSSL v1.1.1 手册页说将支持 SSLv3、TLSv1、TLSv1.1、TLSv1.2 和 TLSv1.3。虽然我们现在有一个只支持 TLS 1.3 的新要求。设置 SSL_CTX_set_min_proto_version(TLS1_3_VERSION) 就可以解决问题吗?或者服务器是否有其他实用的方法来拒绝版本低于 TLS 1.3 的客户端连接?

非常感谢。

0 投票
0 回答
285 浏览

certificate - 设置客户端以进行服务器身份验证确认后,okhttp客户端错误

我们正在尝试使用使用 okhttp 客户端将对象上传到存储桶的 minio-java 客户端。目前我们使用的服务器仅支持服务器身份验证而不支持双向 tls,这主要意味着我们必须验证服务器提供给定 CA 证书的证书。出于这个原因,我们确实创建了以下方法来简单地将 ca 证书文件传递到trustedstore。

如果能帮助我们了解 minio 如何在 MinioClient.java 中使用下面的“enableExternalCertificates”来分离 ca/client 证书,这需要一个 SSL 证书文件,那就太好了。

目前,我们确实有以下例外,我不确定这些例外是否与证书有关。

--- 连接异常 ---

java.net.ConnectException:无法在 okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:248) 的 okhttp3.internal.connection.RealConnection.connect(RealConnection.java) 处连接到 object-storage/10.10.10.10:9000 :166) 在 okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257) 在 okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135) 在 okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation. java:114) 在 okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) 在 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) 在 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain .java:121) 在 okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) 在 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) 在 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) 在 okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java :93) 在 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) 在 okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126) 在 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain. java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254) at okhttp3.RealCall.execute(RealCall.java:92) at io。 minio.MinioClient.execute(MinioClient.java:635) 在 io.minio.MinioClient.getRegion(MinioClient.java:805) 在 io.minio。MinioClient.execute(MinioClient.java:568) at io.minio.MinioClient.executeHead(MinioClient.java:837) at io.minio.MinioClient.bucketExists(MinioClient.java:2209) at com.ericsson.sc.s3c.S3MinioClientHandler .bucketExists(S3MinioClientHandler.java:201) 在 com.ericsson.sc.s3c.S3Agent.checkBucket(S3Agent.java:80) 在 com.ericsson.sc.s3c.S3Agent.lambda$uploadFileToBucket$3(S3Agent.java:57)在 java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) 在 java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) 在 java .base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) 在 java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) 在 java.base/java.util.stream .AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 在 java.base/java.util.stream。在 java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) 在 java.base/java.util.stream.AbstractPipeline 的 ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)。 com.ericsson.sc.s3c.S3Agent.lambda$uploadFileToBucket$4(S3Agent.java:51) 的 java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) 的评估(AbstractPipeline.java:234) ) 在 io.reactivex.internal.operators.completable.CompletableFromAction.subscribeActual(CompletableFromAction.java:35) 在 io.reactivex.Completable.subscribe(Completable.java:2309) 在 io.reactivex.internal.operators.mixed.FlowableConcatMapCompletable$ ConcatMapCompletableObserver.drain(FlowableConcatMapCompletable.java:253) 在 io.reactivex.internal.operators.mixed.FlowableConcatMapCompletable$ConcatMapCompletableObserver.onNext(FlowableConcatMapCompletable.java:118) 在 io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92) 在 io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest$BackpressureLatestSubscriber.drain(FlowableOnBackpressureLatest.java:129)在 io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest$BackpressureLatestSubscriber.onNext(FlowableOnBackpressureLatest.java:68) 在 io.reactivex.internal.operators.flowable.FlowableThrottleLatest$ThrottleLatestSubscriber.drain(FlowableThrottleLatest.java:221) 在 io.reactivex .internal.operators.flowable.FlowableThrottleLatest$ThrottleLatestSubscriber.onNext(FlowableThrottleLatest.java:119) 在 io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92) 在 io.reactivex.internal.util .NotificationLite。在 io.reactivex.internal.operators.flowable.FlowableReplay$ReplaySubscriber.onNext(FlowableReplay. java:388) 在 io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92) 在 io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92)在 io.reactivex.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.innerSuccess(FlowableFlatMapSingle.java:175) 在 io.reactivex.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber$InnerObserver.onSuccess(FlowableFlatMapSingle.java:364) 在 io .reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver。onSuccess(SingleSubscribeOn.java:68) at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:56) at io.reactivex.Single.subscribe(Single.java:3603) at io.reactivex.internal .operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java :66) 在 io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java。 util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent。java.base/java.lang.Thread.run(Thread.java:834) 处的 ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 原因:java.net.ConnectException:Java 处的连接超时(连接超时) .base/java.net.PlainSocketImpl.socketConnect(Native Method) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java: 242) 在 java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) 在 java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在 java.base/java.net.Socket .connect(Socket.java:609) at okhttp3.internal.platform.Platform.connectSocket(Platform.java:129) at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:246) ... 省略了 64 个常用帧64个常用框架省略

--- 套接字异常 ---

java.net.SocketException:在 okio.Okio 的 java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) 处的 java.base/java.net.SocketInputStream.read(SocketInputStream.java:186) 处的连接重置$2.read(Okio.java:140) at okio.AsyncTimeout$2.read(AsyncTimeout.java:237) at okio.RealBufferedSource.read(RealBufferedSource.java:47) at okhttp3.internal.http1.Http1Codec$AbstractSource.read( Http1Codec.java:363) 在 okhttp3.internal.http1.Http1Codec$UnknownLengthSource.read(Http1Codec.java:507) 在 okio.Buffer.writeAll(Buffer.java:1135) 在 okio.RealBufferedSource.readString(RealBufferedSource.java:199) ) 在 io.minio.MinioClient.getRegion(MinioClient.java:805) 在 io.minio.MinioClient.execute(MinioClient.java:663) 在 io.minio.MinioClient 的 okhttp3.ResponseBody.string(ResponseBody.java:176) .putObject(MinioClient.java:4584) 在 io.minio.MinioClient。putObject(MinioClient.java:2726) at io.minio.MinioClient.uploadObject(MinioClient.java:2890) at com.ericsson.sc.s3c.S3MinioClientHandler.uploadFile(S3MinioClientHandler.java:237) at com.ericsson.sc.s3c .S3Agent.lambda$uploadFileToBucket$3(S3Agent.java:60) 在 java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) 在 java.base/java.util.stream。 ReferencePipeline$2$1.accept(ReferencePipeline.java:177) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline. java:484) 在 java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 在 java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) 在 java .base/java.util.stream.ForEachOps$ForEachOp$OfRef。evaluateSequential(ForEachOps.java:173) 在 java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 在 java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)在 com.ericsson.sc.s3c.S3Agent.lambda$uploadFileToBucket$4(S3Agent.java:51) 在 io.reactivex.internal.operators.completable.CompletableFromAction.subscribeActual(CompletableFromAction.java:35) 在 io.reactivex.Completable。在 io.reactivex.internal.operators.mixed.FlowableConcatMapCompletable$ConcatMapCompletableObserver.onNext(FlowableConcatMapCompletable. java:118) 在 io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92) 在 io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest$BackpressureLatestSubscriber.onNext(FlowableOnBackpressureLatest.java:68) 在 io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest$BackpressureLatestSubscriber.drain(FlowableOnBackpressureLatest.java:129) .reactivex.internal.operators.flowable.FlowableThrottleLatest$ThrottleLatestSubscriber.drain(FlowableThrottleLatest.java:221) 在 io.reactivex.internal.operators.flowable.FlowableThrottleLatest$ThrottleLatestSubscriber.onNext(FlowableThrottleLatest.java:119) 在 io.reactivex.internal .operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92) 在 io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:224) 在 io.reactivex.internal.operators.flowable.FlowableReplay$BoundedReplayBuffer .replay(FlowableReplay.java:855) 在 io.reactivex.internal.operators.flowable.FlowableReplay$ReplaySubscriber.onNext(FlowableReplay.java:388) 在 io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92)在 io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92) 在 io.reactivex.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.innerSuccess(FlowableFlatMapSingle.java:175) 在 io.reactivex .internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber$InnerObserver.onSuccess(FlowableFlatMapSingle.java:364) at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.onSuccess(SingleSubscribeOn.java:68) at io.reactivex.internal .operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:56) 在 io。io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89) 处的 reactivex.Single.subscribe(Single.java:3603) io.reactivex.Scheduler$DisposeTask.run(Scheduler.java: 578)在 io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) 在 io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 在 java.base/java.util.concurrent .FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)第 3603 章.ScheduledRunnable.run(ScheduledRunnable.java:66) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264 ) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/ java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)第 3603 章.ScheduledRunnable.run(ScheduledRunnable.java:66) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264 ) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/ java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)在 io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) 在 io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578) 在 io.reactivex.internal 运行(SingleSubscribeOn.java:89) .schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ) 在 java.base/java.lang.Thread.run(Thread.java:834)在 io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) 在 io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578) 在 io.reactivex.internal 运行(SingleSubscribeOn.java:89) .schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ) 在 java.base/java.lang.Thread.run(Thread.java:834)java:66) 在 io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java .util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)java:66) 在 io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java .util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:第834章)ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:第834章)

我认为检查存储桶是否存在后的第一个异常可能与端点主机名“对象存储”的解析有关,但我们仍然有 IP 地址,并且所有其他请求(如存储桶创建)可能有“连接重置”异常由于第一个例外,因为我们仍然使用相同的客户端。但是,我们确实注意到新客户端有时会直接生成“连接重置”异常。

根据minio,使用的文件名对应于环境变量SSL_CERT_FILE,它对应于TLS证书文件的路径(例如自签名TLS证书)。此外,如果我们不生成自己的自定义 http 客户端,MinioClient.Builder.build() 将创建默认 HTTP 客户端对象,并使用上面的 enableExternalCertificates() 加载此类 TLS 证书。至于http客户端的工作人员,我想这个论坛是最合适的。

任何建议将不胜感激。