如何解决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 举报,一经查实,本站将立刻删除。