问题标签 [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.
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
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)
,但同样的事情发生了。我也试过:
这样做的正确方法是什么?
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 的工作原理)。
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
了其他人,但没有成功。我尝试分别包括其中的许多,以找出哪个是启用恢复的,但还没有。
tls1.2 - 在 vert.x Web 应用程序中,如何在 Web 应用程序中启用 TLS 1.3
在 vert.x Web 应用程序中,是否有人偶然知道如何添加 TLS 1.3 并禁用默认使用的所有先前版本的 TLS(TLS 1.1、TLS 1.2?非常感谢您的帮助。
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 证书完美配合。
谢谢你的帮助
java-8 - 更新 Fuse 以获得 TLS v1.3
我是 JBoss Fuse 服务器的新手。我们使用的 Fuse 服务器版本是 7.2。根据位置undertow.xml
文件${karaf.home}/etc
,我们目前支持TLSv1
,TLSv1.1
和TLSv1.2
. 要求也是添加更高版本(TLSv1.3
在本例中)。我想检查其先决条件和可行性方面。
另外,我无法确定 Fuse 7.2 是否支持TLSv1.3
。
我们正在使用 Java 8。
非常感谢任何可以引导我的信息/方向。
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。
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 的客户端连接?
非常感谢。
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客户端的工作人员,我想这个论坛是最合适的。
任何建议将不胜感激。