问题标签 [httpsurlconnection]
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 - 使用HttpsURLConnection时如何覆盖Android发送给服务器的密码列表?
在 TLS 协商期间,客户端向服务器发送支持的密码列表,服务器选择一个,然后加密开始。当我HttpsURLConnection
用于通信时,我想更改这个由 Android 发送到服务器的密码列表。
我知道我可以setSSLSocketFactory
在HttpsURLConnection
对象上使用来将其设置为使用SSLSocketFactory
. 当我想更改SSLSocket
由SSLSocketFactory
.
我知道通常可以使用对象编辑此密码套件列表,并使用它们提供的方法SSLParameters
将其传递给SSlsocket
对象。SSLEngine
但是SSLSocketFactory
似乎没有公开这样的方法!
我找不到方法来更改由I 传递给创建SSLParameters
的返回SSLSocket
对象的.SSLSocketFactory
HttpsURLConnection
该怎么办?
我想这通常也与 Java 有关,而不仅仅是 Android。也许有一种面向对象的方式来做到这一点(例如,将其扩展SSLSocketFactory
并提供给HttpsURLConnection
?)
java - Eclipse插件开发,当我连接时如何停止弹出用户/密码窗口的HttpsURLConnection
JDK IBM 1.6 Eclipse 3.6.2
使用以下代码连接到服务器。
URL urlTemplate = 新 URL(uri); uc = (HttpURLConnection) urlTemplate.openConnection();
当连接错误的凭据时,它会弹出一个窗口输入正确的凭据作为输入,如何停止它?它似乎是内置操作,无法停止该内置功能。
另一个问题是,当我成功连接到服务器一次时,它将存储凭据,即使用户/密码错误,后续测试也将全部运行。如何清除缓存,以便测试新输入的用户和密码?
android - Fiddler - 解密 Android HttpsUrlConnection SSL 流量
我花了无数个小时试图通过 Fiddler 为 HttpsUrlConnection 解密 Android SSL 流量,但收效甚微。如何可靠地配置 Fiddler 以使用 HttpsUrlConnection 解密来自 Android 应用程序的 SSL 流量?
这是我的步骤
- 在 PC 上运行 Fiddler(使用适当的设置:捕获 HTTPS 连接、解密 HTTPS 流量、允许远程计算机连接)
- 在 Android 设备上配置无线连接以通过运行 fiddler 的 PC 进行代理
- 从 android 设备打开浏览器到http://[运行 fiddler 的电脑的 ip]:8888 并下载“FiddlerRoot 证书”。命名并安装它。
- 在安卓浏览器中打开https://www.google.com,在 PC 上查看 Fiddler 中的解密流量。
以上工作。问题是非浏览器 android 流量在 Fiddler 中显示为连接隧道。我最初的研究表明问题是由于证书是如何通过 HttpsUrlConnection 被信任的,所以我确保根据这篇文章https://secure.mcafee.com/us/resources/white-papers/wp-defeating-ssl信任所有证书-cert-validation.pdf
不幸的是,使用 HttpsUrlConnection 信任所有证书对我不起作用,所以我停止了调查。几天后,我决定再试一次,惊讶地发现 fiddler 流量正在为 HttpsUrlConnection 解密!不幸的是,我没有进行任何进一步的更改来解决这个问题,所以我不完全确定它为什么开始工作。它使用的设备是 LG-Optimus L9 Android 版本 4.0.4 并且已植根。
现在我正在尝试为 Nexus 7 Android 版本 4.2.2(未植根)配置它,但可惜我在提琴手中看到的只是连接隧道。由于两台设备上的证书具有相同的序列号,并且我正在测试的应用程序相同,我很难理解为什么我不能用另一台 Android 设备配置 Fiddler。
总结
- Fiddler 可以解密来自 LG Optimus 的 SSL 流量,但只显示来自 Nexus 7 的连接隧道
- 两台设备都运行同一个应用程序,该应用程序使用 HttpsUrlConnection 进行网络请求
- 两台设备都安装了相同的提琴手证书(序列匹配),并且没有安装其他用户证书。
- 不要认为这些很重要,但是...
- Rooted 设备 (LG Optimus Android 4.0.4) 使用 Proxy Droid 指向运行 fiddler 的 PC
- 非根设备(Nexus 7 Android 4.2.2)使用内置“修改网络”指向运行提琴手的 PC
java - HttpsURLConnection 的 SSLSocket
我有一个JEditorPane
通过 SSL/TLS 加载网站。我的目标是(通过反射)获取 SSL 连接的特定信息,例如 SSL 握手的完成消息。我唯一得到的JEditorPane
是URL
,因此是HttpsURLConnection
.
但是我如何获得SSLSocket
的HttpsURLConnection
?有任何想法吗?
java - 如何设置要用于使用 HttpsURLConnection 创建的套接字的密码和协议列表?
获取 an 的正常方法是用 aSSLSocketFactory
初始化一个 new ,然后使用该方法。但是,这不允许我启用所需的密码套件或协议。SSLContext
TrustManager
KeyManager
SecureRandom
getSocketFactory()
HttpsURLConnection
允许进行此类更改的唯一配置是设置其默认值SSLSocketFactory
。我可以创建一个扩展SSLSocketFactory
和覆盖该getDefaultCipherSuites()
方法的类,并包装由创建的套接字createSocket()
以设置所需的密码和协议。但是,这种方法不允许我TrustManager
为连接初始化一个吗?
有没有一种方法我可以做到 - 设置密码套件和协议并初始化信任管理器?
java - 如何在 TrustManager 的 checkServerTrusted() 中获取 CertPathValidatorResult?
当调用checkServerTrusted
实现类的方法时X509TrustManager
,我需要获取与证书链相关的所有验证错误,包括
- 证书路径验证问题。例如 CA 不受信任
- 证书字段验证问题。例如过期的证书,无效的扩展密钥使用
这背后的动机是,我可以在用户将其添加为“例外”之前向用户展示证书验证问题,就像 Firefox 现在所做的那样。但是,现在,一旦发现路径验证问题,CertPathValidatorException
就会抛出 a,但它没有提供有关证书中字段有效性的信息。我该如何实施?
经过一番阅读,我发现CertPath
API 提供了这样的功能,并发现 PKIX 实现是对此的包装,但只是不返回CertPathValidatorResult
. 我想在返回所有验证问题的同时最大限度地利用现有的 JAVA 功能(无需将我自己的自定义包装器写入 API)。
android - 从 URL 连接请求中获取 SSL 证书详细信息
在 android 中,我想与 HTTPS URL 建立 URL 连接。打开连接后,我希望能够从服务器读取证书并获取颁发的公用名和组织字符串?
这可能吗?如果是这样,最好的方法是什么?
到目前为止,我一直在使用 HttpsUrlConnection 作为:
但是在这一点之后,我不确定如何获得具体的证书详细信息?我什至不确定这是否是正确的方法。
android - HttpsURLConnection 中的“已建立连接”异常
我正在尝试使用 POST 请求HttpsURLConnection
并获取
setRequestMethod
奇怪的是,之前返回conn.connected
。false
我错过了什么?
编辑
我尝试了 DefaultHttpClient 并且它有效,所以我将使用它。
java - 获取对 Java 的默认 http(s) URLStreamHandler 的引用
我有一个库需要在我的一个项目中使用,不幸的是它注册了自己的URLStreamHandler
库来处理 http- URLs
。有没有办法获得对 Java 的默认 http- 和 https- 的引用URLStreamHandlers
,所以我可以在 的构造函数中指定其中一个URL
来打开标准的 http 连接而不使用库覆盖的协议?