问题标签 [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.

0 投票
0 回答
295 浏览

android - 是否可以在 Android 中使用/接受自签名证书而不是“Nuking”所有 SSL 证书来发出 HTTPS 请求?

以及如何使用 Android Volley 来实现这一点?有没有人有明确的代码,显示如何接受来自 Uknown CA 的证书?

拜托,我不是在寻找另一个例子,展示如何忽略自签名 SSL 证书。StackOverflow 充满了它,实际上,接受任何 SSL 证书都不是一个好主意。你只想接受一个特定的。时期。

0 投票
1 回答
389 浏览

java - sslsocket 从输入流中只读取一次,为什么?

与服务器的部分连接完成,但不能总是从输入流中读取数据,只能读取一次。

如果我尝试这个,它总是从输入流中读取。

我不知道原因。我只想使用一个全局字段。我不想总是使用新的本地字段。

0 投票
0 回答
532 浏览

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 连接器/JPostgreSQL pgJDBC和 Oracle 提供了一些客户端证书支持)。这样,JDBC 连接字符串可以支持客户端证书作为标准化参数(base64 编码?),就像当前包含用户名和密码一样。

0 投票
1 回答
2738 浏览

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)我在互联网上进行了大量搜索,但无法连接这些课程之间的点以及我是否遗漏或做错了什么。

0 投票
5 回答
2356 浏览

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:从概念上讲,这些是连接经过的步骤:

  1. 从 Android 应用程序连接到安全代理服务器(套接字)
  2. 与代理服务器进行 SSL/TLS 握手(SSLSocket over Socket)
  3. 通过 SSLSocket 向代理服务器发送 CONNECT 消息
  4. 代理连接到目标(https)服务器,从现在开始只复制字节
  5. 与目标 (https) 服务器进行 SSL/TLS 握手(SSLSocket over SSLSocket over Socket)
  6. 将 GET 消息发送到目标服务器并读取响应

问题出现在第 5 步,即在通过 SSLSocket(通过 Socket)的 SSLSocket 上进行握手时。


更新 3:我现在打开了一个带有示例项目和 tcpdump 的 GitHub 存储库:https ://github.com/FD-/SSLviaSSL


注意:我发现并阅读了一个标题非常相似的问题,但不幸的是它没有包含太多有用的帮助。

0 投票
2 回答
10305 浏览

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:

  1. client.crt (client certificate)
  2. client.key (client private key)
  3. ca.crt (CA certificate)

One way to solve the task is to generate a Java keystore:

  1. Use openssl to convert client certificate and key to PKCS12 keystore
  2. 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)?

0 投票
0 回答
1262 浏览

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

希望你能帮助我。

0 投票
0 回答
65 浏览

java - Smtp 服务器向 sslsocket 发出 starttls 命令,但是当 startHandshake() 读取超时时

当 sslsocket.startHandshake() 时 sslsocket 总是读取超时,那么我应该怎么做才能解决这个问题呢?

0 投票
1 回答
127 浏览

java - 在没有证书的 SSL 握手中添加客户端身份验证

我想实现客户端 - 服务器应用程序,它需要使用证书以外的其他数据进行客户端身份验证(例如使用密码)。在我到处寻找类似的东西的地方,我发现只有带有客户端和服务器证书的 2 路(相互)SSL 身份验证,这是我不想要的。

是否有一些用于自定义 ssl 握手和添加客户端身份验证的 API?是否可以使用 JSSE 包或其他一些 Java 技术构建这样的应用程序?

任何关于此的建议或指南都会非常有帮助,因为我是这个主题的新手。

0 投票
1 回答
719 浏览

java - 无法从 SocketChannel 读取数据

我们有一个带有 https 的服务器,它在端口 443 上运行。我想从服务器读取字节。我正在使用以下代码。

并在读取数据时

它给了我例外Connection reset by peer。上线socketChannel .read()

我尝试过InetSocketAddress但仍然没有运气的事件有人可以告诉我该怎么做吗?