一次SSLPeerUnverifiedException,SSLHandshakeException问题的分析
一次SSLPeerUnverifiedException,SSLHandshakeException的问题分析
最近工作遇到一个https链接,通过pc(浏览器,curl)能正常访问,ios能正常访问,但是在android里访问异常
使用DefaultHttpClient访问
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
使用AndroidHttpClient访问
javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: Certificate not valid until Tue Jun 07 08:00:00 GMT+08:00 2016 (compared to Tue May 03 22:25:19 GMT+08:00 2016)

通过抓包发现
pc访问,服务器返回了正确的证书,所以访问正常

抓包工具是'Wireshark 2.0.4 Intel 64.dmg’
https://www.wireshark.org/download/osx/all-versions/
android访问,返回了错误的证书,所以访问不正常

抓包工具:tcpdump: http://www.androidtcpdump.com/
通过比较pc,android与服务器的tls协议交互,
发现tls版本不同,pc使用tlsv1.2 android使用tls1
pc的client hello 协议中包含server_name字断,而android的client hello协议中没有

原因分析:
经过咨询运维同学后,得出结论android上的httpclient没有支持sni,sni(Server Name Indication)是个什么东西呢
这篇文件讲的很清楚了http://fengchj.com/?p=2302,各位看官可以去仔细看看。简单讲就是,同一个机器的同一个的端口上配置了两个https站点,需要通过server_name判断它访问的是哪一个站点,然后返回相应的证书。
解决办法:
这篇文章写的很清楚,
http://blog.dev001.net/post/67082904181/android-using-sni-and-tlsv12-with-apache
简单说就是调用setHostName方法,添加相应的hostname。笔者也正是通过这个方式解决的。非常有效。
一次SSLPeerUnverifiedException,SSLHandshakeException问题的分析的更多相关文章
- javax.net.ssl.SSLHandshakeException(Cas导入证书)
一.报错: javax.net.ssl.SSLHandshakeException二.原因分析:CAS部署时,常常要涉及到HTTPS的证书发布问题.由于在实验环境中,CAS和应用服务常常是共用一台PC ...
- 【转】javax.net.ssl.SSLHandshakeException(Cas导入证书)
本文转自:http://my.oschina.net/laiwanshan/blog/159057 一.报错: javax.net.ssl.SSLHandshakeException 二.原因分析:C ...
- Android开源框架源码分析:Okhttp
一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterceptor ...
- okHttp3 源码分析
一, 前言 在上一篇博客OkHttp3 使用详解里,我们已经介绍了 OkHttp 发送同步请求和异步请求的基本使用方法. OkHttp 提交网络请求需要经过这样四个步骤: 初始化 OkHttpClie ...
- JavaMail邮件发送不成功的那些坑人情况及分析说明
[我的Segmentfault原文]https://segmentfault.com/a/1190000008030346 前言 JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有 ...
- Okhttp之连接池ConnectionPool简单分析(一)
开篇声明:由于本篇博文用到的一些观点或者结论在之前的博文中都已经分析过,所以本篇博文直接拿来用,建议读此博文的Monkey们按照下面的顺序读一下博主以下博文,以便于对此篇博文的理解: <Okht ...
- 记一次因证书问题导致请求失败问题SSLHandshakeException
记一次因证书问题导致请求失败问题SSLHandshakeException 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/10989813.html 最近接一外 ...
- 异常信息:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed
上周五遇到一个问题,工程本地编译运行正常,打包本地tomcat运行也正常.部署到测试环境报错: 2017-05-05 09:38:11.645 ERROR [HttpPoolClientsUtil.j ...
- HttpClient简介与案例分析
HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 jav ...
随机推荐
- .net 分割字符串
string a = "1-2-3-4-5-6-7-8-9"; string[] b = a.Split(new Char[] { '-' }); for (int i = 0; ...
- C语言_来了解一下GCC编译器编译C可执行脚本的过程
GCC简介 Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.gcc是可以在多种硬体平台上编译出可执行程序的超级编译 ...
- python资源推荐
一.文档教程 1. 廖雪峰python教程 廖老师的教程我相信不用说了吧,每个学习python的人或多或少都听说过他,对我的帮助很大. 2.python中文学习大本营 名字叫做python中文学习大本 ...
- Batch Normalization&Dropout浅析
一. Batch Normalization 对于深度神经网络,训练起来有时很难拟合,可以使用更先进的优化算法,例如:SGD+momentum.RMSProp.Adam等算法.另一种策略则是高改变网络 ...
- # *Qt for Com 交互*
Qt COM Q_PROPERTY ActiveX properties public slots ActiveX methods signals ActiveX events Qt 属性支持的数据类 ...
- UVALive - 3644 X-Plosives (并查集)
思路:每一个product都可以作一条边,每次添加一条边,如果这边的加入使得某个集合构成环,就应该refuse,那么就用并查集来判断. AC代码: //#define LOCAL #include & ...
- nyoj234 吃土豆 01背包
思路:假设我们先只考虑一行,规则就是取了i处的土豆,每一个土豆有两种选择,拿与不拿,那么i-1和i+1处的土豆都不能再取,那么要求某一行的最大取值就用一次动态规划即可,dp(i)表示前i个土豆能取得的 ...
- dfs练习
不给提示,练习. 题意: 蒜头的数学实在是太差了,于是老师把他关到小黑屋让他闭门修炼.老师跟他一张纸,上面一排写着1, 2, 3...N这N个数,中间用空白分隔.老师让他在空白处填上加号或者减号.他让 ...
- MySQL架构篇(一)
MySQL复制解决了什么问题? 1.实现在不同服务器上的数据分布 2.利用二进制日志增量进行 3.不需要太多的带宽 4.但是使用基于行的复制在进行大批量的更改时会对带宽带来一定的压力,特别是跨IDC环 ...
- 叼叼叼,HTML5日期(Date)类型和文本(Text)类型互相转换
<input placeholder="From" class="form-control" type="text" onfocus= ...