问题标签 [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 回答
1280 浏览

java - 在 SSL 握手中接受任何客户端证书

我在 Android 和服务器端使用 Netty 与客户端身份验证建立 SSL 安全连接。现在我在连接这些证书时遇到了困难,因为 SSLEngine 由于"null cert chain"拒绝了它们。

这就是我在服务器端所做的。我用一个签名的服务器证书设置了一个 SSLContext(客户端知道 CA,所以它可以验证这个)。

为了让服务器接受来自客户端的任何证书(因为它们都是自签名的),我实现了一个 DummyTrustManager,它只接受任何证书。

关键是我不太确定 getAcceptedIssuers() 方法。

  • 如果我返回一个空数组而不是 openssl-binary(我用它来验证正确的设置)由于空的 AcceptedIssuers 列表而失败。

  • 如果我添加当前服务器证书链,它至少适用于由同一个 ca 签名的客户端证书,但不适用于自签名的客户端证书(这是我需要的)。

但也许我在客户端做错了什么:

我也做了一些研究,据我所知:客户端有一个有效的证书链,但没有发送它,因为服务器告诉它它只接受服务器列出的颁发者。

如果这是正确的,那么我该如何克服这个问题?

我正在考虑一个单独的自签名 CA,它会交付给所有客户端,并且也列在服务器接受的颁发者列表中。任何客户端都使用此 CA 来签署自己的证书。我认为这没有安全问题。还是有更好的解决方案?

0 投票
1 回答
1314 浏览

java - JDK 1.4 的 SSLEngine 的实现?

我有一个基于 NIO 的应用程序,它必须在 Java 1.4 平台(不是 Sun/Oracle 实现)上运行,并且我想使用 SSL 保护网络连接。但是 javax.net.ssl.SSLEngine API 仅从 Java 5 开始可用。

是否存在 javax.net.ssl.SSLEngine API 的替代、免费、纯 Java 实现?

BouncyCastle 似乎提供了 JCE 的实现,但我没有在他们的包中找到 javax.net.ssl.SSLEngine。我错过了什么?

0 投票
0 回答
685 浏览

apache - Apache:仅启用某些 sslciphersuites

我有两个问题。

第一个:我检查了 Firefox 支持哪些密码套件(https://cc.dcsec.uni-hannover.de/)。

示例:密码套件名称:ECDHE-ECDSA-AES256-SHA 密钥大小:256 位描述:密钥交换:ECDH,加密:AES,MAC:SHA1。支持。

如何在 apache 配置中仅启用此 Chiper 套件?

此配置不起作用:

怎么了?

第二个:在 *https://calomel.org/firefox_ssl_validation.html* 上的“仅 256 位完美前向保密”一章中,推荐使用以下芯片

*https://httpd.apache.org/docs/2.2/mod/mod_ssl.html* 上的“SSLCipherSuite 指令”一章无助于以正确的方式配置 apache。如何在 SSLCipherSuite 的正确配置中“翻译”例如 dhe_dss_aes_256_sha。

提前感谢您的阅读和您的帮助。

0 投票
1 回答
3654 浏览

java - SSLEngine unwrap() javax.crypto.BadPaddingException: 坏记录 MAC

这几天让我发疯了。我使用带有 SSLEngine 的 ssl 加密的 java nio 创建了一个客户端。握手工作正常,我向网站写了一个 GET 请求,它工作正常(我得到带有 200 代码的标题)。问题是当网站发回数据包时,在第二个数据包上我得到一个 BadPaddingException。这是我的阅读方法:

我的获取请求很简单,如下所示:“GET \r\nHost: www.google.com\r\n\r\n”

基本上,如果它是一个像https://www.example.com这样的小网站,我可以毫无问题地接收,因为它是一次性发送的。但是,如果我执行类似https://www.google.com的操作,我会得到 BadPaddingException。有任何想法吗?谢谢!

编辑:例外是......

javax.net.ssl.SSLException:在 sun.security.ssl.SSLEngineImpl.fatal(Unknown Source) 在 sun.security.ssl.Alerts.getSSLException(Unknown Source) 在 sun.security.ssl.SSLEngineImpl.readRecord( Sun.security.ssl.SSLEngineImpl.readNetRecord(Unknown Source) 在 sun.security.ssl.SSLEngineImpl.unwrap(Unknown Source) 在 javax.net.ssl.SSLEngine.unwrap(Unknown Source) 在 ssl.engine。 impl.SecureIO.read(SecureIO.java:244) at ssl.engine.impl.ChannelHandler.read(ChannelHandler.java:144) at ssl.engine.impl.ChannelHandler.run(ChannelHandler.java:69) at java.lang .Thread.run(Unknown Source) Caused by: javax.crypto.BadPaddingException: bad record MAC at sun.security.ssl.EngineInputRecord.decrypt(Unknown Source) ... 8 更多关闭

0 投票
1 回答
1260 浏览

android - Android SSLEngine BUFFER_UNDERFLOW after unwrap while reading

I don't know why but half the sites that go through ssl get a buffer_underflow during my read.

When I have my program chained to call different ssl sites consecutively it doesn't work on half the links, but if I call one by one individually, they work. For example, I used Chrome's developer tools to call https://www.facebook.com on my nexus 7 tablet. When I see the requests, The links called are:

If I chain them together (to simulate a call to https://www.facebook.com from the browser), I get half the links getting buffer underflows until eventually I have to close their connections (Reading 0 bytes). However, if I cal them one by one individually, they are always fine. Here is my code for reading:

Thank you.

0 投票
2 回答
3052 浏览

java - SSLEngine 关闭

SSLEngine 文档说明了如何正确关闭 SSL 连接。更具体地说,它提供了有关如何处理断开连接的说明:

除了有序关闭之外,还可能存在无序关闭,其中传输链路在关闭消息交换之前被切断。在前面的示例中,应用程序在尝试读取或写入非阻塞 SocketChannel 时可能会得到 -1。当你到达输入数据的末尾时,你应该调用 engine.closeInbound(),它会通过 SSLEngine 验证远程对等端已经从 SSL/TLS 角度干净地关闭,然后应用程序应该仍然尝试干净地关闭通过使用上述过程。

基本上,如果链接被切断,engine.closeInbound()应该调用。但是,此closeInbound()方法的文档表明,如果在从对等方接收到正确的关闭消息之前调用它,它将引发异常。在我看来,如果连接被切断,这个 close_notify 消息将永远不会收到,所以这个方法总是会抛出那个异常。

我做了测试,做了一个简单的关机程序,socketChannel.read()返回-1,我打电话engine.closeInbound(),我确实得到了以下异常:

我错过了什么?文档的这两部分不是矛盾的吗?

0 投票
3 回答
12550 浏览

java - 使用 Bouncy Castle 提供程序创建 SSLContext 实例

我坚持创建 SSLContext(我想用它来实例化 SSLEngine 以通过 java-nio 处理加密传输):

编码

抛出以下异常:

我将 Bouncy Castle 当前的提供程序包“bcprov-jdk15on-150.jar”(我从这里获得)附加到应用程序类路径及其引导类路径(通过 VM-Option -Xbootclasspath/p),但都没有解决问题。我还尝试了不同的值protocol(即“SSL”和“TLSv1”),但没有任何效果。

另外,我在这里这里发现了有类似问题的人。但与他们相比,我的目标是(并且正在使用)Java 7(或更高版本),但我仍然有这个问题。通常以这种方式使用 Bouncy Castle 是否可行,或者我是否必须通过 SSLEngine 使用它们各自的 API 而不是 oracle 的 NIO重写我的协议(这是我现在正在做的方式)?

非常感谢您在这里提供的任何帮助。

0 投票
1 回答
667 浏览

java - 任务后 SSLEngine 握手卡住

我使用来自http://books.google.com/books?id=l6f1jTB_XCYC&lpg=PA185&vq=scalable%20secure&pg=PA185#v=onepage&q&f=false的示例来查看 SSLEngine 如何与 SocketChannel 一起工作。后来我想创建适合我的实现的解决方案。不幸的是,这个例子不起作用。它在 runDelegatedTasks() 方法执行后卡住了。服务器控制台输出:

客户端控制台为空。

任何人都可以帮助这个例子吗?

0 投票
3 回答
30059 浏览

android - 让 SSLEngine 在 Android (4.4.2) 上使用 TLSv1.2?

伙计们,我希望我遗漏了一些明显的东西,我希望有人能够提供一些启示。我试图让 TLSv1.2 在 SSL + NIO 上下文中运行(使用AndroidAsync库),所以我试图通过 SSLEngine 启用它。我可以运行这样的代码:

我最终在 logcat 上看到了这个:

当然,如果我尝试engine.setEnabledProtocols(new String[] { "TLSv1.2" })得到 IllegalArgumentException “不支持协议 TLSv1.2”。

我可以看到上下文声称支持 TLSv1.2,但是我从该上下文制作的引擎不支持?这里发生了什么?如果我在上面的第一行中使用“TLS”而不是“TLSv1.2”,这些都不会改变,顺便说一句。

我认为这可能与这个问题有关,并且我已经阅读了这个(尚未回答的)问题类似的文章,但它们似乎并没有达到目的 - 我见过的所有解决方案似乎都依赖 SSLSocket 而不是 SSLEngine。

非常感谢您提供的任何知识。

更新 6/23/14 10AMEDT

所以我找到SSLEngine.setSSLParameters了,我希望它能让我传入我从中获得的 SSLParameters SSLContext.getSupportedSSLParameters(),但是当我调用它时,我得到一个声称不支持密码套件的异常,所以看起来 setSSLParameters() 只是在做与 setEnabledCipherSuites() 所做的相同,并且引擎已经处于无法将 TLS 1.2 协议/套件识别为受支持的状态。

0 投票
1 回答
122 浏览

rest - SSLEngine 不会解密所有数据

我正在尝试在非阻塞模式下将 SSLengine 与 SocketChannels 一起使用。

握手正确完成,但是当我尝试从 channelsocket 读取和解密 http 帖子时,只有标题被解密并且正文消失:

在 peerNetData 中打印加密数据时,我得到:

?>.//POST 测试 HTTP/1.1 Cache-Control: no-cache Content-Length: 20 Content-Type: application/octet-stream Host: 192.168.XX

?>.//?>.//?>.//?>.//?>.//?>.//?>.//?>.//?>.//?>.// ?>.// <--- 这里是加密字符

但是当我在 peerAppData 中打印解密的数据时,我得到了

POST 测试 HTTP/1.1/ Cache-Control: no-cache Content-Length: 20 Content-Type: application/octet-stream Host: 192.168.XX // 然后这里是三个空行。

这是SSlengine的解密问题吗?

谢谢

我还想添加该 unwrap 方法返回 OK 状态。