问题标签 [sslengine]

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 回答
1384 浏览

java - SSLEngine 在第二个循环中握手库存

我正在尝试使用 SSLEngine 实现 SSL 握手,我需要以服务器和客户端两种方式进行,但是我被卡住了,我无法弄清楚为什么。

握手正确开始,交换了 Hello,交换了密钥,但随后我进入了 NEED_UNWRAP 状态。

这是我正在使用的握手代码:

这是我的 SSLEngine 创建类:

当我作为客户尝试握手时。正如您从日志中看到的那样,我从 NEED_WRAP 开始,将数据发送到服务器,状态到达 NEED_UNWRAP(这是正确的)服务器响应,我解析答案没有任何错误,但我没有前进到 NEED_WRAP,而是陷入了 NEED_UNWRAP。 ..

如果我尝试作为服务器进行握手,日志看起来像这样。正如您从日志中看到的那样,第一次读取很好,我响应了客户端,我从客户端获取了第二位数据,而不是拥有 NEED_WRAP 并且能够继续握手我被击中带有 NEED_UNWRAP 消息,但当然没有更多数据可以从客户端读取....

在发布之前,我确实在 StackOverflow 上查看了一些类似的问题,但它们主要是关于订单错误,我认为在这种情况下我是对的......我很确定我错过了明显的,但我只是似乎无法弄清楚...

0 投票
1 回答
317 浏览

java - 如何从 List<X509Certificate> 创建 SSLEngine

acme 为您提供整个证书链作为List<X509Certificate>.

如何SSLEngine从该证书链创建?

(理想情况下,我希望跳过整个密钥库动态填充密钥库以在运行时读取)。

编辑:我有以下代码,但

  1. 不确定应该填写什么别名
  2. 不知道为什么我需要密码
  3. 不确定我是否应该使用变量 defaultType
  4. JKS 是否适合 509Cert
  5. 我想要“TLSv1.2”吗

    /li>
0 投票
3 回答
10058 浏览

netty - Spring WebClient 抛出 javax.net.ssl.SSLException: SSLEngine 在大量使用时已关闭

那是我的代码:

我同时从多个线程调用此函数。当我在一次运行中只调用它大约 20~30 次时,它工作得非常好。但是当我在大约 2 分钟内调用它 500~600 次(到同一个 URL)时,它会抛出

编辑

我试过只创建一个实例,WebClient但它仍然抛出相同的异常

0 投票
1 回答
261 浏览

java - 如何测试基于 SSLEngine 的 TLS 实现?

我正在考虑通过非 TCP连接实现 TLS 的可能性。这个想法是使用SSLEngine,它提供了加密/解密数据到内存缓冲区的可能性,并通过我们想要的可靠传输来发送它们。

我必须实现 SSL 协议定义的所有握手(客户端问候、服务器问候......等)。

如果我这样做,我将如何测试我的实现是否有效?是否有一些我可以运行的“官方 TLS 测试套件”?

感谢您的建议

0 投票
1 回答
254 浏览

java - NIO 客户端/服务器安全地验证凭据

我使用受 SSL 保护的 Java NIO 来连接客户端和服务器。要连接到服务器,系统会提示用户输入主机、端口、用户名和密码。到目前为止,我可以连接客户端和服务器(他们成功完成了 SSL 握手),理论上我可以开始来回发送数据。我还没有编写验证登录凭据(用户名、密码)的机制。

服务器可以通过在数据库中查找用户名和密码来验证它们。如果客户端发送的凭据不正确,连接将被关闭。

问题 1:何时应验证凭据?我认为这必须在 SSL 握手之后发生。

问题 2:如何在凭证被序列化并发送到服务器之前安全地打包凭证?我想我应该散列密码。我也应该散列用户名吗?

像这样简单的东西就足够了吗?

问题 3:每个会话都应该对凭据进行一次身份验证,对吗?我阅读了一些似乎表明应该为每个请求验证凭据的帖子。

问题 4:我应该使用哪种哈希算法?SHA-512 似乎很受欢迎。

0 投票
2 回答
1821 浏览

java - 升级到 TLSv1.3 时 SSLEngine 使用的变化

Java 11 发布时TLSv1.3支持,默认使用。

它在 HTTPS 和 SSL 套接字的上下文中工作正常,但似乎在使用时SSLEngine由于行为的变化而存在额外的障碍TLSv1.3

因此,通过NIOusing进行通信的强大实现在启用SSLEngine时不再有效TLSv1.3。没有明显的错误,以异常或 SSL 错误的形式,两个节点只会来回发送 wrap/unwrap 消息并最终超时。

我对使用 TLSv1.2 的 SSLEngine 和使用 TLSv1.3 的 SSLEngine 之间的行为变化的确切列表感兴趣,如果可能的话,还有这些之间的迁移清单。不幸的是,Java 11 的 SSLEngine javadocs 没有此信息 - Java 11 中没有新方法,也没有引用 TLSv1.3。

0 投票
1 回答
70 浏览

java - bad_certificate 但仅在使用 chrome 和 RSA(不是 DES)时

最近,我认为在升级等之后开始收到“javax.net.ssl.SSLHandshakeException:收到致命警报:bad_certificate”,现在我想使用 TLSv1.3。Safari、Opera 和 Firefox 似乎工作正常,但 Chrome 导致服务器异常

有谁知道这是为什么?这对我来说没有意义。

万一你好奇的情况下重现的步骤

  1. git 克隆https://github.com/deanhiller/webpiecesexample-all.git
  2. cd webpiecesexample-all
  3. git checkout -t origin/testChromeSsl
  4. ./gradlew assembleDist
  5. cd webpiecesexample/output/distributions
  6. 解压 webpiecesexample.zip
  7. 运行 ./bin/webpiecesexample
  8. 检查日志/server.log
  9. Safari 工作,chrome 导致服务器吐出 bad_certificate

好的,我刚刚将构建升级到 gradle 5.3.1,然后是 jdk11。要升级到 jdk11,我必须将用于测试的自签名证书升级到 RSA 而不是 DES,因为 TLSv1.3 不再支持 DES。我似乎收到了这个新错误

这篇文章中的所有内容似乎都不起作用

调用 WebService 并遇到 SSL/证书问题

0 投票
3 回答
3718 浏览

java - java SSLEngine 说 NEED_WRAP,调用 .wrap() 仍然是 NEED_WRAP

我看到 SSLEngine 有一个奇怪的问题,想知道我的代码或 SSLEngine 是否有问题。这是我看到事物的顺序

  1. HandshakeStatus 是 NEED_WRAP
  2. 我们调用 SSLEngine.WRAP
  3. 之后,有零数据写入缓冲区,并且 SSLEngineResult.result=OK(not overflow or underflow :( ) 并且 HandshakeStatus 是 STILL NEED_WRAP

最重要的问题:如何彻底调试?如何以某种方式“看到”每条消息?我可以很容易地捕获字节流,但是是否有一些库可以将其解析为 SSL 握手对象?

第 298 行(记录之前的握手状态)到第 328 行(我们用信息抛出异常)是这里的相关代码

https://github.com/deanhiller/webpieces/blob/sslEngineFartingExample/core/core-ssl/src/main/java/org/webpieces/ssl/impl/AsyncSSLEngine3Impl.java

堆栈跟踪是

有任何想法吗?我怎样才能真正深入研究呢?我的偏好是一个库,它获取字节并吐出代表每个握手消息或解密数据包的 ssl 对象(带有原始加密事物附带的任何标头信息)。

具体来说,这里是上面提到的代码

谢谢,院长

0 投票
0 回答
268 浏览

android - Android NIO - 无法从 SocketChannel 读取大数据,错误:BUFFER_UNDERFLOW

我们正在尝试通过 NIO TCPs SocketChannel 读取大量数据。
代码适用于少量数据(小于 16 KB),但高于第一次,它将 16 KB 读入目标缓冲区,再次尝试读取剩余数据,但给出BUFFER_UNDERFLOW异常。

基于文档

客户端正在从网络中读取部分数据,我们需要强制客户端再次读取。但是,
它没有发生在我们的代码中。我们正在使用以下代码:

上面的代码参考取自这里

调试代码后,我们得到以下异常

我们使用Conscrypt库来建立与 TCps 服务器的基于 PSK(预共享密钥)的通信,因此使用从 Conscrypt 提供的 pskKeyManagers 初始化的 sslContext。在具有大数据负载的 api 请求期间,我们收到上述错误。

此外,如果我们能获得任何使用 Conscrypt 进行 TLS 读/写通信的示例代码,那将会很有帮助。


在过去的 10 天里,我们一直在头疼。如果有人可以提供帮助,将不胜感激。

0 投票
1 回答
607 浏览

aws-api-gateway - 我可以通过 ACM 私有证书使用 VPC 链接到 NLB 吗?

我有一个 AWS API GW,我正在尝试连接到不同 VPC 中的 HTTPS REST 端点。根据 AWS 支持和我准备好的文档,解决方案是使用指向 GWs VPC 中的 NLB 的 VPC 链接与另一个 VPC 中的 IP 目标。我的 NLB 是 HTTPS,因为后端服务是 HTTPS。对于 NLB SSL 证书,我使用 ACM 生成私有证书(基于 ACM 私有 CA)。当我测试 GW 时,我得到了可怕的General SSLEngine 问题错误。NLB 工作正常,我可以从浏览器中点击它并从后端服务获取数据。VPC 链接是否不信任私有证书?我看不到任何添加 CA 的方法。这整个安排对我来说似乎很复杂。有什么建议么?