cloudant-sync-datastore中的ssl自签名证书

问题描述

我有一个Android应用程序,可将数据复制到运行在我们其中一台服务器上的CouchDB实例。我们正在使用cloudant-sync-datastore库进行复制-推和拉。

到目前为止,我们正在使用http,并且一切正常。现在,我们计划切换到SSL。我已经在服务器计算机上创建了一个自签名的ssl证书并进行了部署。现在可以通过ssl从浏览器访问CouchDB控制台。

我现在正在尝试通过android通过ssl访问此COuchDB实例-在进行复制时。据我了解,为此,我们最终在cloudant库中调用了push和pull功能。我希望能够读取ssl证书,并检查通用名称是否受我们支持,如果允许,请允许。

我在想的是,我们可以在构建复制器对象时使用“ addRequestInterceptor”函数并添加SSLCustomizerInterceptor。

我正在添加SSLInterceptor,如下所示-

import { times } from 'lodash'

  times(2,() => {
    cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button')
      .click()
  })

上面的代码提供了一个SSLSocketFactory对象,该对象用于创建SSLCustomizerInterceptor对象。

public static SSLSocketFactory initSSLSocket()
    {
        try {
            SSLContext sslContext = SSLContext.getInstance("TLS");
            //SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null,initTrustManager(),new java.security.SecureRandom());
            return sslContext.getSocketFactory();
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            Log.e("SSL Ex:",e.toString());
            return null;
        }
    }


private static TrustManager[] initTrustManager()
    {
        return new TrustManager[]{
                new X509TrustManager() {

                    @Override
                    public void checkClientTrusted(java.security.cert.X509Certificate[] chain,String authType) throws
                            CertificateException {
                    }

                    @Override
                    public void checkServerTrusted(java.security.cert.X509Certificate[] chain,String authType) throws
                            CertificateException {

                    }
                    @Override
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new java.security.cert.X509Certificate[]{};
                    }
                }
        };
    }

然后我将上述ssl拦截器存储在一个数组中,并在构建复制器生成器时使用它。

但是它仍然没有打开与CouchDB服务器的https连接。我的理解是,这应允许将https流量发送到服务器。

我还需要附加在服务器上使用的自签名证书吗?如果是这样,我该怎么做?我的想法是我可以使用上面的代码,然后在TrustManager:checkServerTrusted代码中,我可以读取收到的DN证书,然后确定此证书是否有效。

请告诉我是否可行。如果没有,当Couchdb服务器具有自签名的ssl证书时,还有其他方法可以确保我们可以使用cloudant库实现上述功能吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)