问题标签 [sslsocketfactory]
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.
android - 是否可以在 Android 中使用/接受自签名证书而不是“Nuking”所有 SSL 证书来发出 HTTPS 请求?
以及如何使用 Android Volley 来实现这一点?有没有人有明确的代码,显示如何接受来自 Uknown CA 的证书?
拜托,我不是在寻找另一个例子,展示如何忽略自签名 SSL 证书。StackOverflow 充满了它,实际上,接受任何 SSL 证书都不是一个好主意。你只想接受一个特定的。时期。
java - sslsocket 从输入流中只读取一次,为什么?
与服务器的部分连接完成,但不能总是从输入流中读取数据,只能读取一次。
如果我尝试这个,它总是从输入流中读取。
我不知道原因。我只想使用一个全局字段。我不想总是使用新的本地字段。
mysql - 没有密钥库的 MySQL JDBC SSL 客户端证书 (SSLSocketFactory)
Google Cloud SQL (MySQL) 支持SSL 客户端证书以保护连接。我已经让这些与mysql CLI 客户端和 MySQL-python 一起工作,没有任何戏剧性,但 Java 的 JDBC 驱动程序模型似乎不太灵活。通过将必要的密钥和证书导入到我的密钥库中,我能够使其工作,但似乎我无法轻松地提供特定证书以在运行时用于特定连接。
对于我来说,将所有证书存储在每个 JVM 的单个密钥库中是行不通的,我们有一个包含数十个独立客户端证书的多租户环境。PostgreSQL JDBC 文档随便提到它应该可以通过实现你自己的 SSLSocketFactory ( source ):
有关如何实际实现此类的信息超出了本文档的范围。寻求帮助的地方是JSSE 参考指南和JDBC 驱动程序提供的NonValidatingFactory的源代码。
Java SSL API 对 JDBC 驱动程序开发人员来说并不是很熟悉,我们会对您使用此机制实现的任何有趣且通常有用的扩展感兴趣。具体来说,能够提供由服务器验证的客户端证书会很好。
我见过的唯一实现是GoogleCloudPlatform/cloud-sql-mysql-socket-factory即时查询 Google Cloud API 以检索临时 ssl 客户端证书。这就是我要开始的内容,但我对一些基本的套接字属性(特别是connectTimeout 和 socketTimeout)当前没有实现感到沮丧。
还有其他我应该注意的 SSLSocketFactory 实现吗?似乎通用实现对多个 JDBC 驱动程序很有用(MySQL 连接器/J、PostgreSQL pgJDBC和 Oracle 提供了一些客户端证书支持)。这样,JDBC 连接字符串可以支持客户端证书作为标准化参数(base64 编码?),就像当前包含用户名和密码一样。
java - System.setProperty 和 Security.setProperty 之间的区别
在设计为在定制芯片上运行的 java 应用程序中的以下代码行中找到。
我从互联网推断“ssl.SocketFactory.provider”是要在 java.security.Security 类上设置的属性。
如果将“ssl.SocketFactory.provider”设置为系统属性而不是安全属性会产生任何差异(正面或负面),我感到很困惑,这是正确的,我的意思是系统和安全子集或彼此的超集,所以它确实设置“ssl.SocketFactory.provider”属性的对象无关紧要。
PS:1)片上java应用程序成功地通过服务器身份验证与服务器通信,但是当从更新的服务器请求客户端身份验证时,SSlSocketFactory(从SSLContext创建并使用经过验证的信任和密钥管理器工厂初始化)无法创建套接字在服务器 IP 和端口。线程在 .createSocket(IP,port) 处永远阻塞;
2)我在互联网上进行了大量搜索,但无法连接这些课程之间的点以及我是否遗漏或做错了什么。
java - SSLSocket 通过另一个 SSLSocket
我正在尝试在 Android 应用程序中创建一个SSLSocket
在另一个之上。SSLSocket
下层连接是到安全 Web 代理(SSL 上的 HTTP 代理)的 SSL 安全连接,上层连接是用于 SSL 上的 HTTP (HTTPS)。
为此,我正在使用 SSLSocketFactory 的createSocket()
函数,该函数允许传递一个现有的 Socket 来运行 SSL 连接,如下所示:
当底层套接字是普通的 tcp 套接字时,此代码工作正常,但是当我使用之前使用上述代码创建的 SSLSocket 作为底层套接字时,握手失败并出现以下异常:
我正在 Android 7.1.1 上进行测试。该应用程序的目标是 SDK 级别 23。
- 我可能做错了什么?
- 我该如何进一步调试该问题?
- 有没有人有一个 SSLSocket 在最近的 Android 版本上通过另一个 SSLSocket 的工作示例?
任何帮助是极大的赞赏!
更新:完全相同的代码在 Mac 上的 JRE 1.8 中有效,但在 Android 上无效。
更新 2:从概念上讲,这些是连接经过的步骤:
- 从 Android 应用程序连接到安全代理服务器(套接字)
- 与代理服务器进行 SSL/TLS 握手(SSLSocket over Socket)
- 通过 SSLSocket 向代理服务器发送 CONNECT 消息
- 代理连接到目标(https)服务器,从现在开始只复制字节
- 与目标 (https) 服务器进行 SSL/TLS 握手(SSLSocket over SSLSocket over Socket)
- 将 GET 消息发送到目标服务器并读取响应
问题出现在第 5 步,即在通过 SSLSocket(通过 Socket)的 SSLSocket 上进行握手时。
更新 3:我现在打开了一个带有示例项目和 tcpdump 的 GitHub 存储库:https ://github.com/FD-/SSLviaSSL
注意:我发现并阅读了一个标题非常相似的问题,但不幸的是它没有包含太多有用的帮助。
java - How to build a SSLSocketFactory from PEM certificate and key without converting to keystore?
I'm given a self-signed client certificate kit that is to be used to access a server via HTTPS. The kit consists of the following PEM files:
- client.crt (client certificate)
- client.key (client private key)
- ca.crt (CA certificate)
One way to solve the task is to generate a Java keystore:
- Use openssl to convert client certificate and key to PKCS12 keystore
- Use keytool to import CA certificate to the store
... and then use code like the following to build SSLSocketFactory instance:
... which is later used to init http library.
So we obtain a KeyStore, then init KeyManagers and TrustManagers with its help and finally we build SSLSocketFactory instance with them.
The question is: is there a way to avoid that keystore file creation and somehow build SSLSocketFactory starting with PublicKey and Certificate instance (which, for example, can be obtained from PEM files using bouncycastle's PemReader)?
java - javax.net.ssl.SSLException:意外消息
我们正在尝试在客户端和服务器之间进行安全的 http 通信。
服务器提供证书,我们获取它们,安装它们并开始运行,关键是在客户端和服务器之间同时交换确切数量的消息,让我们发疯的问题是请求之间,在SSLHANDSHAKE我们随机获取异常javax.net.ssl.SSLException: Received fatal alert: unexpected_message恰好在ServerHello握手阶段,我不知道它是如何或为什么会发生的,而它对 98% 的其他请求保持正常工作。
它在第 2 步崩溃。
Transporter.java:这是负责发送和接收数据的类。
函数sendToVD()完成客户端和服务器之间交换的主要工作。
在客户端:一个 Web 应用程序,JSF管理前端,spring 管理 bean 生命周期,与客户端的通信入口由Servlets保证。
客户端部署在RedHat Linux机器中,所有TLS_VERSIONS都已启用,JDK_8。
在服务器端:我无法发布有关安全措施的目标 URL 的详细信息,但它遵循以下模式https://ip:port/path,并且它支持TLS_v1.2。
希望你能帮助我。
java - Smtp 服务器向 sslsocket 发出 starttls 命令,但是当 startHandshake() 读取超时时
当 sslsocket.startHandshake() 时 sslsocket 总是读取超时,那么我应该怎么做才能解决这个问题呢?
java - 在没有证书的 SSL 握手中添加客户端身份验证
我想实现客户端 - 服务器应用程序,它需要使用证书以外的其他数据进行客户端身份验证(例如使用密码)。在我到处寻找类似的东西的地方,我发现只有带有客户端和服务器证书的 2 路(相互)SSL 身份验证,这是我不想要的。
是否有一些用于自定义 ssl 握手和添加客户端身份验证的 API?是否可以使用 JSSE 包或其他一些 Java 技术构建这样的应用程序?
任何关于此的建议或指南都会非常有帮助,因为我是这个主题的新手。
java - 无法从 SocketChannel 读取数据
我们有一个带有 https 的服务器,它在端口 443 上运行。我想从服务器读取字节。我正在使用以下代码。
并在读取数据时
它给了我例外Connection reset by peer
。上线socketChannel .read()
。
我尝试过InetSocketAddress
但仍然没有运气的事件有人可以告诉我该怎么做吗?