Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中的SSL连接_Android - Fatal编程技术网

android中的SSL连接

android中的SSL连接,android,Android,我正在用android开发一个应用程序,这需要我使用KSOAP2库使用服务器sslhandshake 我可以在http站点上实现同样的功能,但在HTTPS站点上失败,说“无法验证证书” 有人能帮忙吗?可能是因为您试图访问的站点可能没有CA。它可能只有自签名证书。这是处理自签名证书时会遇到的问题 请尝试这些链接,并向我们展示您已经实现的功能 此代码有帮助吗? 此代码在mixare.org中用于接受自签名证书 请注意,在使用此方法时,您不会受到MITM攻击 嗯,, Daniele请注意,至少在2

我正在用android开发一个应用程序,这需要我使用KSOAP2库使用服务器sslhandshake

我可以在http站点上实现同样的功能,但在HTTPS站点上失败,说“无法验证证书”


有人能帮忙吗?

可能是因为您试图访问的站点可能没有CA。它可能只有自签名证书。这是处理自签名证书时会遇到的问题

请尝试这些链接,并向我们展示您已经实现的功能

此代码有帮助吗?

此代码在mixare.org中用于接受自签名证书

请注意,在使用此方法时,您不会受到MITM攻击

嗯,,
Daniele

请注意,至少在2.3之前的Android版本中,RapidSL CA没有根CA

您可以通过以下站点检查有问题证书的颁发者:

另一个快速检查是尝试在股票浏览器中加载HTTPs页面,看看它是否抱怨证书

如果这与您的情况不符,则忽略此答案

如果您有此CA签署的证书,则必须

  • 通过执行类似Danieles answer的操作,在应用程序中显式地处理它,但实际上还要将证书与RapidSSL(或您使用的任何证书)的存储证书进行比较
  • 在相关web服务器的链中添加一个中间证书,以使RapidSSL证书通过GeoTrust认证
  • 退房


    您可以使用自签名证书。只需将此方法用作您的HTTPClient:

    public static  HttpClient getNewHttpClient() {
        try {
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            trustStore.load(null, null);
    
            SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
            sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    
            HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
    
            SchemeRegistry registry = new SchemeRegistry();
            registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            registry.register(new Scheme("https", sf, 443));
    
            ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
    
            return new DefaultHttpClient(ccm, params);
        } catch (Exception e) {
            return new DefaultHttpClient();
        }
    }
    

    向我们展示一些代码和/或控制台输出。谢谢
    public static  HttpClient getNewHttpClient() {
        try {
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            trustStore.load(null, null);
    
            SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
            sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    
            HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
    
            SchemeRegistry registry = new SchemeRegistry();
            registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            registry.register(new Scheme("https", sf, 443));
    
            ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
    
            return new DefaultHttpClient(ccm, params);
        } catch (Exception e) {
            return new DefaultHttpClient();
        }
    }