问题标签 [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.
java - 在 Java (JSSE) 中使用默认 KeyStore 时如何提供特定的 TrustStore
概述
JSSE 允许用户通过指定 javax.net.ssl.* 参数来提供默认的信任库和密钥库。我想为我的应用程序提供一个非默认的 TrustManager,同时允许用户像往常一样指定 KeyManager,但似乎没有任何方法可以实现这一点。
细节
假设在 unix 机器上我希望允许用户使用 pkcs12 密钥库进行身份验证,而在 OS XI 上希望允许用户使用系统钥匙串。在 OS X 上,应用程序可能按如下方式启动:
这将正常工作:当应用程序访问需要相互身份验证(客户端证书身份验证)的 https 服务器时,将提示用户允许访问其钥匙串。
问题
现在假设我想将自签名证书颁发机构与我的应用程序捆绑在一起。我可以通过构造 TrustManagerFactory 并传入包含我的证书 ( javadoc ) 的 KeyStore 来覆盖默认信任管理器。但是,要使用这个非默认信任管理器,我需要创建并初始化一个 SSLContext。问题就在这里。
通过调用init(..)并同时传递 KeyManager 和 TrustManager 来初始化 SSLContext。但是,使用 javax.net.ssl.* 参数创建 KeyManager 的逻辑嵌入在默认 SSLContexts 的实现中——我找不到使用默认行为获取 KeyManager 或 KeyManagerFactory 的方法,同时还指定了非默认 TrustManager 或 TrustManagerFactory。因此,似乎不可能使用例如适当的操作系统特定的钥匙串实现,同时还提供用于验证远程服务器的根证书。
java - 控制 TCP 连接上的远程客户端状态
我需要编写一个带有集中式服务器和大量远程客户端的平台来执行任务。我目前正在使用 RMI 连接,它是充当远程客户端(RMI 服务器)客户端的集中式服务器。它正在工作,但我担心在不久的将来会出现很多问题(使用 RMI 是个好主意吗?)所以我正在考虑将代码移动到 SSLSockets 并发送序列化类来做同样的事情。
我对这种方法的问题是如何控制活动客户列表。我需要有连接数据来发送任务,我需要知道它们是否还活着。任何的想法?
在此先感谢您的帮助。
java - 建立安全连接时没有共同的密码套件
我正在尝试在两个 Java 项目之间建立安全连接,但我得到了 SSLHandshakeException(没有共同的密码套件)。这是在双方创建套接字的方法:
客户:
服务器:
我有一个用 keytool 生成的 RSA 密钥。此代码从磁盘加载它。
我做错了什么?
更新: 我用这个数组在两边添加了对 setEnabledCipherSuites 的调用:
我得到相同的结果。
java - SSLSocket 也适用于不安全的 http?
我可以将 SSLServerSocket 类用于 http 和 https 会话并侦听一个端口(通过自动检测客户端带有 http 或 https)吗?还是必须打开两个端口并使用 SSLServerSocket for https 和 ServerSocket for http?
谢谢
java - 如何在 java 的 ssl 会话中获取主密钥?
我的应用程序中有一个 sslscoket 作为服务器,我正在运行 java 1.6。我需要握手期间使用的主密钥来实现 MS-CHAP 质询响应等。我已经读过“这个主密钥的值只有底层安全套接字实现才知道,并且不会通过 SSLSession API 公开”
如何获取主密钥的值?
谢谢
java - SSLSocketFactory 查找在 java 上花费的时间
我正在使用 java 的 SSL 套接字建立客户端/服务器连接。我正在从客户端向服务器发送一个长字符串,然后将该字符串记录到服务器部分的文本文件中。这真的很基本。
我想要做的是我想了解将该字符串从我的客户端传输到我的服务器所需的时间。我怎样才能达到这个结果?有没有人可以给我一个建议?如果您需要查看我的代码,此代码使用与我的代码相同的结构:单击
谢谢你的帮助。
java - 使用 STARTTLS 将套接字升级到 SSLSocket:recv 失败
我正在尝试使用 STARTTLS 将套接字升级为 SSLSocket。在 InspIRCd 的 wiki 上,这是它应该如何工作的
所以在我写的代码中(稍微简化了)
然而,无论有没有 startHandshake() 我总是得到一个 recv 失败(没有我只是在我尝试从新的 bufferedReader 读取时得到它
完整日志(带-Djavax.net.debug=all
)
我做错了什么会导致此错误?我知道此功能有效,因为其他客户端可以做到,但我只是不知道如何从 Java 中做到这一点
有什么建议么?
ssl - SSLSocket 主要通过 3G 阻止,但通过 wifi 工作
我有一个关于网络的非常奇怪的问题。我创建了一个安全连接到 PC 上运行的服务器的 andorid 应用程序。请注意,尽管 PC 在 NAT 之后,但相应的端口已被转发。还将 PC 放入 DMZ 以避免任何端口转发问题。
问题是,当我通过 WIFI 使用代码时,它工作得很好,但是,在 3G 上,它几乎总是(30 个中的 29 个)阻塞在 SSLSocket 的 getOutputStream 方法中(在服务器端发生了接受)。
你能帮我解决这个问题吗?
谢谢
客户端代码:
失败日志:
成功:
java - 如何使用 Keytool 验证证书?
我想要一个程序来验证使用 Oracle 的SSLSocket
类创建 SSL 套接字。在我的程序中,我希望客户端通过其证书(使用创建Keytool
)。服务器应验证证书,然后继续通信。我希望服务器检查连接到它的每个客户端的证书。假设所有密钥(服务器和客户端)都存储在Keystore
. 我该如何实施?
编辑:
如果我无法正确表达我的问题,请原谅我。我是新来的。我正在阅读此链接以获取一些指示。在这里,在读取密钥库时,服务器直接硬编码了客户端的密钥文件名(即“client.public”)。但是,在我的程序中,这将由客户端指定,因为服务器无法事先知道客户端的公钥文件名是什么。
java - 如何在服务器上添加多个信任源
我的问题与Stackoverflow 上的这个问题有些相关。但是,我的服务器将侦听单个端口。服务器将只信任客户端,因为它自己找到了客户端的公钥证书。如果服务器将在自己的文件系统中查找其公钥证书(在正常的、不安全的连接上),我希望客户端发送名称。如果服务器找到证书,那么它会将旧的、不安全的客户端连接转换为 SSL 连接。这甚至可能吗?如果是这样,怎么做?