问题标签 [jsse]

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

java - 告诉 java 接受自签名证书(在某种程度上是一个重复的问题)

好的,所以当我尝试通过 webmin 访问文件管理器时,它会失败并抛出一个错误:

无法获取语言列表:javax.net.ssl.SSLHandshakeException:java.sucurity.cert.CertificateException:Java 无法信任服务器

所以,我读了一点,发现(我认为)我需要配置 java 来接受自签名证书。现在,

告诉 java 接受自签名的 ssl 证书

这真的没有解决任何问题,因为我真的不确定我们是否有同样的问题,或者我们的问题是否有相同的解决方案?所以,我想知道是否有人可以通过一些文章为我指明正确的方向,可能告诉我我需要配置什么 java(我假设它是 VMware java?)

想法?

0 投票
1 回答
13187 浏览

java - 在同一个 JVM 上设置多个信任库

我有一个在 weblogic 服务器上运行的 Java 应用程序。该应用程序有两个不同的模块,它们使用 SSL 连接到外部 Web 服务——比如说模块 A 和模块 B。

模块 A - 建立在 Axis 上 - 使用信任库 A 模块 B - 建立在 Spring-ws 上 - 使用信任库 B。

模块 A 已存在。模块 B 正在引入。

我需要能够根据正在调用的模块在 JVM 中动态设置信任库。

由于某些限制,我没有选择 - 创建自定义密钥管理器。- 使用一个信任库

我尝试使用 System.setProperty im Module B 代码库来设置信任库。然而,它只有在模块 B 被首先调用时才有效。例如 - 假设我重新启动了 JVM,然后我调用模块 A - 它在 JVM 中设置了它自己的信任库,然后我调用模块 B - 它失败了 - 即使我使用过,它也没有在 JVM 中设置它自己的信任库System.setProperty 方法。

我是否遗漏了什么,或者只是 System.setProperty 没有覆盖现有的设置值。如果是这样,我的选择是什么。

0 投票
2 回答
22005 浏览

java - 有人可以指出有关 javax.net.debug 的确切详细信息吗?

我想获得有关使用 javax.net.debug 生成的 SSL 调试输出的确切详细信息。我看过,但几乎所有东西都只是通过一个示例文件。

如果这比我预期的更容易找到,请提前抱歉。

0 投票
4 回答
70108 浏览

java - javax.net.ssl.SSLException: java.security.InvalidAlgorithmParameterException: trustAnchors 参数必须为非空

我希望解析一个每天更新所述文件的 XML 文件——我遇到的唯一问题是他们使用自己的证书(https://..),我不能使用那个特定的 URL,也不能使用是否有 http://... 链接可用。

此代码在运行我的测试时引发以下异常:

javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须为非空

我已经看到了各种关于创建各种类来处理这种连接或个人服务器的建议,以及将证书添加到密钥库,然后将该密钥库添加到 Java 项目,但我一直无法做到这一点,我正在寻找一种稍微简单的方法来在线访问 XML。

0 投票
2 回答
2748 浏览

java - 带有 SSL 连接的 Java NoClassDefFoundError

我们有一个应用程序使用 JAX-RPC 客户端库并在 Java 的旧版本 (1.4.2) 上运行,并且收到以下 SSL 错误:

这以前对我们有用,客户端库的唯一更改是与使用的身份验证协议相关的更改,并且需要更新到最新版本的 BouncyCastle。这些变化都比 SSL 协议更高,而且这个错误似乎甚至不涉及 BouncyCastle。

有没有人见过这样的错误,也许有任何想法或建议?我尝试将证书添加到cacerts. 如果在 Java 1.6 上运行,这可以正常工作,但不幸的是,运行它的生产系统暂时仍与 Java 1.4 相关联。

此外,如果我们在没有 SSL 的情况下连接到我们的开发系统,我们的 JAX-RPC 代码以及它所做的身份验证也可以正常工作。

[编辑 - 附加信息] 我现在可以看到,新版本的 BouncyCastle 发生了一些冲突,导致了这个问题。我尝试使用古老的(1.18)版本,但似乎没有收到 SSL 错误,而是从我们的应用程序中获取了一个错误,因为它需要更新的算法。

0 投票
3 回答
5509 浏览

java - jndi LDAPS 自定义 HostnameVerifier 和 TrustManager

我们正在编写一个应连接到不同 LDAP 服务器的应用程序。对于每台服务器,我们可能只接受某个证书。该证书中的主机名无关紧要。当我们使用 LDAP 和 STARTTLS 时,这很容易,因为我们可以使用StartTlsResponse.setHostnameVerifier(..-)和使用StartTlsResponse.negotiate(...)匹配的SSLSocketFactory. 但是,我们还需要支持 LDAPS 连接。Java 本机支持这一点,但前提是服务器证书受默认 ​​java 密钥库信任。虽然我们可以替换它,但我们仍然不能为不同的服务器使用不同的密钥库。

现有的连接代码如下:

我们可以添加 own CustomSocketFactory,但是如何传递信息呢?

0 投票
1 回答
1307 浏览

java - Bouncy Castle 中的 TLS-SRP 支持

我想开发可以与用 C 和 GnuTLS 实现的 TLS-SRP 服务器通信的 Java 客户端。我喜欢 JSSE 不支持 TLS-SRP,而且 Bouncy Castle 的文档太少,但很有用。有什么信息可以让我使用 TLS-SRP 开发 Java 客户端吗?

最好的祝愿

0 投票
1 回答
3635 浏览

java - 如何将 Windows 密钥库 (MCS) 与 JDBC 一起使用?

我正在尝试创建一个PKI用于身份验证的 java 应用程序。我需要能够从 Microsoft 证书存储 (MCS) 中检索证书并将其传递给 Oracle 数据库 (11.2)。

我正在使用jdbc:oracle:thin驱动程序连接。在谷歌上花了很长时间后,我空了。我发现要更改的不同属性(取决于文章):

  • 设置属性javax.net.ssl.keyStoreType = "Windows-MY"
  • 设置javax.net.ssl.keyStore = "Windows-MY"
  • javax.net.ssl.keyStore should be set to "None"(如果使用我认为不会起作用的自定义 KeyManager,因为当它进入我的自定义 KeyManager 时,我已经从连接属性中指定的密钥库中获得了证书)。

当然,所有这些人都声称成功,但对我没有任何帮助。我已经尝试了所有我能够找到的所有示例,但都没有运气。我在使用 Oracle 钱包时能够成功进行身份验证,所以我知道我的证书很好。如果有人以前这样做过并且愿意发布一些很棒的代码。

我知道大多数人都将 Windows 密钥库与网站一起使用,因此正在创建自己的 SSLContext,但我无法想象我是唯一一个想要使用 JDBC 来执行此操作的人(据我所知,它不允许我提供它是一个 SSLContext)。

这是我认为应该工作的代码,但没有。

此代码失败,但有以下异常:

0 投票
1 回答
9866 浏览

java - 使用自签名证书和 SSLEngine (JSSE) 的 SSL 握手

我的任务是实现一个自定义/独立的 Java 网络服务器,它可以在同一个端口上处理 SSL 和非 SSL 消息。

我已经实现了一个 NIO 服务器,它对于非 SSL 请求工作得很好。我在 SSL 部分玩得很开心,真的可以使用一些指导。

这是我到目前为止所做的。

为了区分 SSL 和非 SSL 消息,我检查入站请求的第一个字节,看它是否是 SSL/TLS 消息。例子:

在 parseTLS() 方法中,我像这样实例化 SSLEngine:

实例化 SSLEngine 后,我使用 unwrap/wrap 方法使用直接来自官方JSSE 示例的代码处理入站数据:

握手的第一部分似乎工作得很好。客户端发送握手消息,服务器响应带有 4 条记录的消息:

接下来,客户端发送一个包含三个部分的消息:

SSLEngine 解包客户端请求并解析记录,但 wrap 方法生成 0 个字节,握手状态为 OK/NEED_UNWRAP。换句话说,我没有任何东西可以发回给客户,握手就戛然而止。

这就是我卡住的地方。

在调试器中,我可以看到 SSLEngine,特别是 ServerHandshaker,没有找到任何对等证书。当我查看来自客户端的 0 字节长的证书记录时,这一点相当明显。但为什么?

我只能假设 HelloServer 响应有问题,但我似乎无法解决问题。服务器似乎正在发送一个有效的证书,但客户端没有发回任何东西。我的密钥库有问题吗?还是信任库?还是与我实例化 SSLEngine 的方式有关?我难住了。

其他几点:

  • 上面代码片段中引用的密钥库和信任库是使用以下教程创建的: http ://www.techbrainwave.com/?p=953
  • 我使用 Firefox 10 和 IE 9 作为客户端来测试服务器。两个 Web 客户端的结果相同。
  • 我正在使用 Sun/Oracle JDK 6 和与之捆绑的 Java 安全套接字扩展 (JSSE)。

我期待您的任何指导,但请不要告诉我我疯了或使用 Netty 或 Grizzly 或其他一些现有的解决方案。目前,它不是一个选择。我只是想了解我做错了什么。

提前致谢!

0 投票
1 回答
1393 浏览

java - 使用 JSSE SSLEngine 进行 SSL 会话管理

我正在使用 NIO 和 SSLEngine 开发 SSL Web 服务器。我能够成功处理握手并发送/接收应用程序数据。但是,我很难理解如何维护 SSL 会话状态。

我正在使用 Firefox 10 来测试我的网络服务器。在初始页面加载时,一切正常。握手成功完成。服务器处理客户端请求并发送回响应。响应干净利落,浏览器加载应用程序数据(html、图像等)。这是从客户端发送到服务器的消息的快照。

页面请求 #1

同样,在初始页面加载时,一切正常。但是,如果我刷新浏览器或转到另一个“页面”,Firefox 会发送应用程序记录而不是客户端问候。

页面请求 #2

在这种情况下,SSLEngine 在尝试解开应用程序数据时会引发异常。

我相信这是因为我正在为每个页面请求实例化一个新的 SSLEngine。如果我只实例化 SSLEngine 一次并将其设置为全局/静态变量,它会成功解开应用程序记录,并且我可以将响应发送回客户端。我可以刷新页面,访问其他页面等,没有任何问题。页面加载速度非常快,因为我们跳过了整个 ssl 握手过程。

不幸的是,如果我在所有这一切进行时从不同的浏览器(例如 IE 或 Safari)访问 Web 服务器,SSLEngine 内的会话状态将被破坏,我的 Web 服务器无法响应任何新的 SSL 请求。因此,一次实例化 SSLEngine 并使其成为全局可访问的静态变量似乎不是一个可行的选择。所以...

我到底应该如何响应第二个页面请求(页面请求#2)?除了 IP 地址之外,还有其他方法可以将第二个页面请求(页面请求 #2)与初始握手请求(页面请求 #1)联系起来吗?在第二个页面请求(页面请求#2)中的应用程序数据中是否有一个 SSL 会话 ID?

提前致谢!