- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用具有基本身份验证的 restful ws。我没有将任何证书导入我的 keystore 。当我使用 chrome 插件 Advance Rest client
对其进行测试时(使用基本身份验证和 base64 编码的用户名:密码)。我可以看到回复。到目前为止,一切都很好。但是当我开发 Java 代码来使用这个 ws 时,我得到 SSL 握手失败:
org.springframework.web.client.ResourceAccessException: I/O error:
Received fatal alert: handshake_failure; nested exception is
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:453)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:377)
at test.Rest.main(Rest.java:37) Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
我的问题是:如果问题是因为我没有将证书导入我的 keystore ,那么 Java 代码和插件应该不能一起工作。在这里,插件有效,但我的代码无效。是什么原因?我的代码有问题吗?
下面是我的代码
RestTemplate restTemplate = new RestTemplate();
String plainCreds = "username:pass";
byte[] plainCredsBytes = plainCreds.getBytes(Charset.forName("US-ASCII") );
byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
ResponseEntity<String> response =
restTemplate.exchange("https://url",HttpMethod.GET,new
HttpEntity(headers),String.class);
这是日志文件的链接:(我已经用 XXXXXX 替换了我的服务器名称) http://www.filedropper.com/ssllog
运行后:openssl s_client -showcerts -tls1 -connect host:port
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
CONNECTED(00000164)
8088:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:.\ssl\s3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1452011344
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
这是我运行命令 openssl s_client -connect server:port 时的输出
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
CONNECTED(00000164)
depth=0 C = US, ST = "XXXXXX", L = XXXXXX, O = XXXXXX, OU = xxxxx, CN = XXXXXXXXX.test.intranet, emailAddress = xxxxx@xxxxx
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = "XXXXXXX ", L = XXXXX, O = XXXXXX, OU = xxxxxx, CN = XXXXXXXXX.test.intranet, emailAddress = xxxxx@xxxxx
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/C=US/ST=XXXXXXX /L=XXXXX/O=XXXXXX/OU=XXXXX/CN=XXXXXX.test.intranet/emailAddress=xxxxx@xxxxx
i:/DC=intranet/DC=xxxx/CN=XXXXXX DEV Issuing CA
---
Server certificate
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXX.....
-----END CERTIFICATE-----
subject=/C=US/ST=XXXXXXX /L=XXXXX/O=XXXXXX/OU=XXXXX/CN=XXXXXX.test.intranet/emailAddress=xxxxx@xxxxx
issuer=/DC=intranet/DC=XXX/CN=XXXXX DEV Issuing CA
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: XXXXX, P-256, 256 bits
---
SSL handshake has read 1895 bytes and written 443 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 568BF22A5CDBF103155264BBC056B272168AE0777CBC10F055705EB2DD907E5A
Session-ID-ctx:
Master-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1452012074
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
read:errno=0
最佳答案
从 javax.net.debug
日志我可以看到您使用的是 Java 7 并且客户端解析为 TLSv1。从 openssl
输出您的服务器不支持 TLSv1。
TLS ver. 1.1 and 1.2 are disabled in Java 7 by default.
Although SunJSSE in the Java SE 7 release supports TLS 1.1 and TLS 1.2, neither version is enabled by default for client connections. Some servers do not implement forward compatibility correctly and refuse to talk to TLS 1.1 or TLS 1.2 clients. For interoperability, SunJSSE does not enable TLS 1.1 or TLS 1.2 by default for client connections.
通过以下方式启用 TLSv1.1 和 TLSv1.2:
JVM 参数:
-Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1
或者通过 Java 代码设置相同的属性:
System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,TLSv1");
或安装JCE Unlimited Strength policy files for Java 7 .我不能 100% 确定这一步是否能解决问题,尽管安装 JCE 总是值得的,因为它允许 JVM 使用现有算法的更强版本。
2016 年 9 月 29 日更新:
在选项 1 和 2 中,协议(protocol)的顺序从好到坏(TLS 版本 1.2 到 1)。
关于 Spring RestTemplate : SSL handshake failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34563385/
应用程序在模拟器上运行良好,但我无法在我的设备(小米 Mi4)上启动应用程序。起初我用这样的文字播种对话: Installation failed with message Failed to est
尽管使用了唯一的模块名称(例如 THIS 不是手头的问题),但在 kadena 的测试网上部署我的智能合约失败并显示以下错误消息: : Failure: Tx Failed: Keyset failu
简而言之 - 我正在尝试从 plist 中获得高分 这是读取数据的代码: var myOutput: AnyObject? = NSUserDefaults.standardUserDefau
在 Xcode(7.2 和 7.3) 中进行 UI 测试时,我的测试有时会失败并出现相当一般性的错误: Assertion Failure: UI Testing Failure - Failure
我正在尝试向 BizTalk 发送 HL7 消息并收到错误代码 0xC0C01B4e(路由失败报告)和消息: Routing Failure Report for 我已经在最后一天工作了,现在收到这
我对 scrapy 还很陌生,我正在尝试使用一些代理来抓取一些 craigslist 页面,但我收到了一些错误,如下所示。我尝试了命令 scrapy shell "https://craigslist
我正在尝试使用来自服务器的给定链接使用 URL 类下载一些内容。 我要下载的代码是: URL url = new URL(downloadUrl); I
我正在做一个数据抓取项目,我的代码使用了 Scrapy(版本 1.0.4)和 Selenium(版本 2.47.1). from scrapy import Spider from scrapy.se
我正在设置 ADF 管道以将 blob 复制到 Azure SQL DB。我的管道中有一个迭代事件,其中我设置了一个计数器,仅当 blob 存在时才进行循环和复制。 除了一些随机的 PK 违规之外,这
我正在设置 ADF 管道以将 blob 复制到 Azure SQL DB。我的管道中有一个迭代事件,其中我设置了一个计数器,仅当 blob 存在时才进行循环和复制。 除了一些随机的 PK 违规之外,这
如果 junit 测试的结果为“失败”,这到底意味着什么?我假设测试期间发生了异常,但我找不到任何有关它的信息。失败跟踪中的行也是: Assert.assertTrue(result); 其中结果只是
我正在制作这个控制台应用程序,用户必须在其中输入内容。然而,当代码到达用户输入文件名的部分,然后使用 strcat 将其添加到文件路径中时,它会输出段错误。完整代码如下: int main(int a
如何解决这个问题?命令 ionic cordova 构建 android 失败:构建因异常而失败。 出了什么问题: 无法启动守护进程。此问题可能是由于守护程序配置不正确造成的。例如,使用了无法识别的
当我尝试在我的设备而不是 Android 虚拟设备上运行应用程序时,它给出错误并停止运行。 在控制台上显示这些消息。 打开:权限被拒绝 pkg:/data/local/tmp/com.example.
今天我下载了 Android Studio v 0.8.0 beta。我正在尝试在 SDK 17 上测试我的应用程序。 Android Studio 错误 Failure [INSTALL_FAILE
我使用 Meizu MX6 在 Android Studio 上工作。以前一切正常。但似乎在更新 Flyme 之后,我开始遇到这个问题: Failure [INSTALL_FAILED_USER_RE
这个问题在这里已经有了答案: List[Try[T]] to Try[List[T]] in Scala (4 个答案) 关闭 2 年前。 如果我有一些验证函数: def validateOne(a
我安装了 Docker 版本“Docker 版本 19.03.8,构建 afacb8b”,当我尝试使用 docker pull 命令时,如“docker pull mcr.microsoft.com/
我正在Xcode 11上构建SwiftUI应用程序,但是当我切换到应用程序中的特定选项卡时,它会立即终止。 问题是,它始终指向Application Delegate文件,我认为这并不是真正的问题。我
所以我这里有一个 Azure 机器学习管道,它由许多 PythonScriptStep 任务组成 - 确实非常基本。 由于网络问题或其他问题,其中一些脚本步骤会间歇性失败 - 确实没有什么意外。这里的
我是一名优秀的程序员,十分优秀!