文档章节

issue-Android6.0#SSLHandshakeException

LiangX
 LiangX
发布于 2016/09/23 14:47
字数 258
阅读 143
收藏 0

方案一

解决办法(仅适用于web服务器为tomcat的情况,其他web服务器根据原理自行配置)

修改Tomcat服务器conf/server.xml文件中和Https有关的Connector节点,添加ciphers用于指定密钥:

<Connector 
    SSLEnabled="......" 
    clientAuth="......" 
    connectionTimeout="......" 
    keystoreFile="......"
    keystorePass="......" 
    maxThreads="......" 
    port="......" 
    protocol="......" 
    redirectPort="......" 
    scheme="......" 
    secure="......" 
    <!--此处为要新增代码-->
    ciphers="TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA"
    sslProtocol="......" 
    truststoreFile="......"
    truststorePass="......"
/>

原理参考:http://blog.csdn.net/duanbokan/article/details/50911148

方案二

public class EasySSLSocketFactory extends SSLSocketFactory {
        SSLContext sslContext = SSLContext.getInstance("TLS");

        @SuppressWarnings("WeakerAccess")
        public EasySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
            super(truststore);
            TrustManager tm = new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };

            sslContext.init(null, new TrustManager[]{tm}, null);
        }

        @Override
        public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
            return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
        }

        @Override
        public Socket createSocket() throws IOException {
            return sslContext.getSocketFactory().createSocket();
        }
    }

    private EasySSLSocketFactory getSSLSocketFactory() {
        try {
            /// We initialize a default Keystore
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            // We load the KeyStore
            trustStore.load(null, null);
            // We initialize a new SSLSocketFacrory
            EasySSLSocketFactory socketFactory = new EasySSLSocketFactory(trustStore);
            // We set that all host names are allowed in the socket factory
            socketFactory.setHostnameVerifier(EasySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            // We set the SSL Factory

            return socketFactory;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

 

© 著作权归作者所有

LiangX
粉丝 22
博文 33
码字总数 12468
作品 0
朝阳
程序员
私信 提问
TortoiseGit-1.7.7.0 发布

Release 1.7.7.0 Features Fixed issue #758 : Make the log of a bare repository available Fixed issue #880 : Allow sync / fetch / push on bare repository Fixed issue #818 : SafeCR......

ddatsh
2012/02/10
1K
15
Highcharts 2.3.3 发布,纯Javascript图表库

Highcharts是一个制作图表的纯Javascript类库,主要特性如下: 兼容性:兼容当今所有的浏览器,包括iPhone、IE和火狐等等; 对个人用户完全免费; 纯JS,无BS; 支持大部分的图表类型:直线图...

转念
2012/12/05
4.2K
17
Scrapy 1.0 发布,Web 爬虫框架

Scrapy 1.0 发布,该版本有多项新的特性和 bug 修复,部分内容如下: 新特性和增强 Python logging (:issue:`1060`, :issue:`1235`, :issue:`1236`, :issue:`1240`,:issue:`1259`, :issue:`...

oschina
2015/06/30
4K
14
FireBug 1.5 Alpha 发布

Firebug 1.5 is Firebug 1.4 with additions by John J. Barton, Jan Odvarko Hans Hillen, Kevin Decker, Mike Radcliffe, Hern Firebug 1.5 supports Firefox 3.0 and Firefox 3.5 == New ......

红薯
2009/07/07
1K
0
Subversion 发布 1.7 第一个 alpha 版本

这是 SVN 1.7 的第一次公开发布的 alpha 测试版本。 关于 Subversion 1.7 的发行说明: http://subversion.apache.org/docs/release-notes/1.7.html 该 Alpha1 版本的改进记录: http://svn...

红薯
2011/06/10
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

cesium调用天地图服务

本文转载于:专业的前端网站➧cesium调用天地图服务 全球矢量地图服务 var viewer = new Cesium.Viewer("cesiumContainer", { animation: false, //是否显示动画控件 baseLayerPi...

前端老手
25分钟前
4
0
Docker常用命令

场景一:镜像下载、运行及删除 COMMAND DESC 查看 docker images 列出所有镜像(images) docker ps 列出正在运行的容器(containers) docker ps -a 列出所有的容器 docker pull centos 下载cen...

_Change_
25分钟前
5
0
Spark ML使用DataFrame进行K-Means

1.前言 前一篇文章使用了RDD的方式,进行了K-Means聚类. 从Spark 2.0开始,程序包中基于RDD的API spark.mllib已进入维护模式.现在,用于Spark的主要机器学习API是软件包中基于DataFrame的API...

一位不知名的帅气网友
28分钟前
4
0
当遇到美女面试官之如何理解Redis的Expire Key(过期键)

  在面试中遇到美女面试官时,我们以为面试会比较容易过,也能好好表现自己技术的时候了。然而却出现以下这一幕,当美女面试官听说你使用过Redis时,那么问题来了。 👩面试官:Q1,你知道...

ccww_
32分钟前
5
0
干货来袭!游戏背景音乐的角色创建和主界面

角色创建/选择 在一些大型的游戏中,例如多人在线的游戏玩家必须创建一个游戏的虚拟人物进行扮演游戏。初次玩这款游戏的人都会进行创建,选择职业起名字性别选择编辑人设样式等等的操作,通常...

奇亿音乐
35分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部