问题标签 [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 投票
2 回答
14191 浏览

java - 公共 https 网站上的 jsse handshake_failure

我已经阅读了一个相关的问题,但它似乎并没有在我看到失败的同一个地方失败。

我正在尝试一个非常简单的操作:

但是当我在我的 Mac 和 Windows 机器上使用 Java 6 运行它时,我得到了一个 handshake_failure。

其他人一直遇到找不到证书的问题,但调试日志 ( -Djavax.net.debug=ssl:handshake) 显示找到的证书很好:



2010 年 1 月 31 日编辑:

查看使用wireshark 的数据包,Firefox 3.5 和Java 1.6 之间的客户端问候消息略有不同。

Java 1.6 发送 SSLv2 hello 消息,但版本设置为 TLS 1.0 (0x0301)

Firefox 3.5 发送 SSLv2 hello 消息,但版本设置为 SSLv3.0 (0x0300)

服务器似乎以相同的方式对两者进行响应。首先是服务器问候数据包,然后是带有服务器证书和“服务器问候完成”的组合数据包

Java 和 Firefox 的响应不同: Java将三个 SSL 记录作为三个数据包发送:客户端密钥交换,然后是更改密码规范,然后是加密握手消息

Firefox将所有这三个 SSL 记录作为一个数据包发送。

此时,对于 Java,服务器会发送一个致命警报,指示握手失败,而 firefox 会收到成功完成握手过程的响应。

在这一点上,我最好的猜测是,要么来自 java 的 TLSv1 的初始请求令人困惑,要么单独的数据包以某种方式混淆了服务器。 知道如何测试这些理论中的任何一个吗?



编辑 2/1/2010: 阅读相关问题,我看到“openssl”命令行工具可以诊断某些问题。运行openssl s_client -connect membership.usairways.com:443显示发送 TLSv1 请求工作正常。因此,Java 与服务器交互的方式更加微妙。

0 投票
4 回答
75346 浏览

java - 有没有办法加载与 java_home/jre/lib/security 文件夹中指定的不同的 cacerts?

我在运行 2 个或 3 个应用程序的系统中安装了一个 java。

所有应用程序都使用相同的运行时。

有没有办法为 ca 证书指定不同的密钥库,而不是 java_home/jre/lib/security 中的密钥库。也就是说,是否有一个选项可以指定加载并添加到从 java_home/jre/lib/security/cacerts 加载的证书中的“额外”密钥库?

我要避免的是每次升级盒子中的 jdk 时都必须重新导入我们的本地 ca。

0 投票
1 回答
3100 浏览

ssl - 使用 JSSE (Javase6) 和自签名证书设置 SSL 连接

我正在尝试构建一个使用 SSLSocket 交换数据的简单客户端/服务器系统。(JavaSE 6) 服务器必须有自己的证书,客户端不需要。

我从这个 http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore开始 为服务器生成密钥和自签名证书。把它们加起来:

然后在我的服务器代码中

我基本上遗漏了一些要点,因为我收到“javax.net.ssl.SSLException:没有可用的证书或密钥对应于已启用的 SSL 密码套件”。当我尝试运行服务器时。

会不会是证书有问题?在 keytool 中使用 -validity 时,证书是自签名的,所以如果我没记错的话它应该可以工作。

阅读文档似乎设置属性“javax.net.ssl.keyStore”足以让 SSLContext 正确设置。有什么建议吗?

0 投票
2 回答
2799 浏览

jboss - 在客户端调用 https wsdl 期间如何在客户端 jar 文件中包含 jssecacert(cacert)

我有一个必须在客户端应用程序中导入的 jar,并允许客户端在导入的 jar 的帮助下调用我的 https wsdl Web 服务。

我看到必须调用https服务时,它必须是<java_home>位置的安全文件夹中的有效cacert文件。

但是,仅通过将 jar 导入客户端的应用程序,我无法将 cacert 文件安装到客户端的 javahome 安全文件夹中。

如果您对如何实现这一点有任何想法,任何帮助都会得到帮助,在此先感谢。

编辑[已解决]:

我通过在服务调用之前添加此方法解决了我的问题

0 投票
2 回答
36105 浏览

java - 为什么 Java 的 SSLSocket 会发送版本 2 的客户端 hello?

SSLSocket.getEnabledProtocols()方法返回以下内容: [SSLv2Hello, SSLv3, TLSv1]. 事实上,当我打电话connect()并打开 SSL 调试时,我看到使用了 v2 客户端 hello:

但是我发现了两个(诚然是旧的)参考资料说 JSSE 不支持SSL 版本 2:

来自Java 基础网络

'SSLv2Hello' 是一个伪协议,它允许 Java 使用 SSLv2 'hello message' 发起握手。这不会导致使用 Java 根本不支持的 SSLv2 协议。

并来自JSSE 参考指南

J2SDK 1.4 和更高版本中的 JSSE 实现实现了 SSL 3.0 和 TLS 1.0。它没有实现 SSL 2.0。

现在,我的理解是,仅当客户端确实支持 SSL 2.0 版时,才应发送 2.0 版客户端问候语。来自RFC 2246

支持 SSL 版本 2.0 服务器的 TLS 1.0 客户端必须发送 SSL 版本 2.0 客户端问候消息 [SSL2] ...警告:发送版本 2.0 客户端问候消息的能力将被淘汰,并尽快取消。

那么Java为什么要使用它呢?

0 投票
2 回答
6607 浏览

java - 没有身份验证的java安全套接字?

我有一个简单的安全套接字服务器-客户端程序。
对于服务器证书,我使用 keytool 创建了一个密钥库。
当我尝试通过客户端连接到服务器时,出现以下异常:
在服务器中:

在客户端:

如果我的理解是正确的,那么这些异常是由于我使用我创建的证书这一事实引起的。
我的问题如下:
如果我在服务器和客户端中设置启用的密码套件,所有 *_anon* 密码套件,这不应该解决问题吗?
我的意思是如果我启用*_anon_*密码套件,则不需要身份验证,因此没有例外。
它是否正确?
因为我仍然遇到异常。我尝试在已启用的密码套件中包含所有已启用的+_anon 密码套件。没有成功。我尝试只设置 anon 并得到一个新的例外:

有人可以用匿名密码套件解释为什么我会得到这些例外吗?
注意:
如果我在客户端上设置javax.net.ssl.trustStore指向我创建并由我的服务器使用的密钥库的系统属性,则通信正常!
该程序正常工作,数据从客户端发送到服务器正常。


更新:
这是我用来启用匿名密码的片段(我已经为服务器和客户端部分做了这个):

堆栈跟踪位于客户端:

在服务器端:

现在,如果我只是这样做:

所以只有匿名密码套件被启用,我得到:

谢谢

0 投票
1 回答
1950 浏览

java - java安全客户端套接字身份验证

对于安全的服务器套接字以发送服务器证书,我所做的就是使用已使用我的密钥库初始化SSLContext的 a进行初始化。 但是我怎么能在客户端做到这一点呢? 即对于我做的客户:KeyManagerFactory.getKeyManagers()

我使用与信任库相同的密钥库。我认为只是为了寻找 JSSE 就可以了。
问题是我进入了服务器部分(我setNeedClientAuth在 serversocket 中设置为 true)。

那么我应该如何配置客户端以发送证书?系统属性不是正确的方法吗?
因为我看不到 SSLContext 如何在客户端使用。

谢谢!

0 投票
4 回答
13070 浏览

java - 我可以避免使用 JSSE 将密钥库密码放在命令行上吗?

我们正在使用 Maven 2,并有一个使用 SSL 客户端身份验证保护的 Maven 存储库管理器。为了让 Maven 访问存储库,必须将以下系统属性传递给 Java:

javax.net.ssl.trustStore=trust.jks
javax.net.ssl.trustStorePassword= <trustPass>
javax.net.ssl.keyStore=keystore.p12
javax.net.ssl.keyStoreType=pkcs12
javax.net.ssl.keyStorePassword=<keyStorePass>

有关更多详细信息,请参阅此迷你指南

为了在 Maven 中设置这些系统属性,我必须使用 MAVEN_OPTS 环境变量(或直接在命令行上传递它们)。无论哪种方式,当 Maven 实际执行时,所有这些属性都对系统上的其他用户可见(通过 ps),包括我的密钥库密码。

有没有办法设置这些属性,以便密码不会在命令行上暴露?

0 投票
1 回答
3131 浏览

java - Java 1.6 JSSE 默认 SSL 会话超时?

Java 1.6 JSSE 使用的默认 SSL 会话超时是多少?

SSLSessionContext有获取和设置它的方法,但它和JSSE 参考指南都没有提到任何默认值。

0 投票
2 回答
4417 浏览

java - 为什么 TLS 1.0 客户端和 SSL 3.0 服务器之间的握手失败?

有一个项目广泛使用 JSSE。

根据配置参数,SSLContext 被初始化为SSLv3. 意思是如果参数没有设置它是SSLv3,否则它是TLS

我偶尔注意到一些握手失败并跟踪它:如果客户端协商 TLS 并且服务器回复为SSLv3,则握手失败

为什么会这样?我认为 TLS 和 SSLv3 几乎可以互换。他们不是吗?如果我将服务器端更改为始终回复TLS,是否有可能会破坏某些内容?