- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个由 ODK Android 应用程序访问的网络应用程序 ( https://opendatakit.org/ )。我正在做的工作需要 https 连接。然而,ODK 返回 javax.net.ssl.SSLPeerUnverifiedException
。我如何让 odk 信任与我的 localhost
的 SSL 连接?
最佳答案
添加此代码以信任所有证书 -
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.SSLSocketFactory;
public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public MySSLSocketFactory(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();
}
}
并使用此方法获取 HTTPClient -
public 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();
}
}
这将信任所有证书。
干杯:)
关于android - 如何让 ODK Android 应用程序(我无法修改其源代码)信任来自本地主机的假证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706853/
我正在 Android 中使用 ODK Framework 开发数据收集应用程序。我刚刚在我的本地主机上设置了 MySQL 服务器,数据完美地存储在 MySQL 数据库中。但是图像以二进制格式存储。我
我想安装 odkaggregate,但遇到一些问题。我在电脑上尝试了一下,得到了这个: 2017 年 6 月 15 日 8:46:11 PM org.opendatakit.common.persis
我正在尝试创建一个 xls 表单,该表单使用“pulldata”命令来引用在 csv 文档中上传的数据。 ODK 在此处提供了一个示例:link . 当我尝试将他们的示例上传到允许通过 Enketo(
我对 ODK Aggregate 进行了一系列调查,并希望以 MySQL 服务器托管的数据库中的表格形式访问结果信息。当然,我可以从 ODK Aggregate 下载数据并手动将其添加到 MySQL
我一直在尝试使用maven 构建aggregate-mysql 项目。以下是终端中键入时显示的错误:“mvn install”位于aggregate-mysql 目录中。 Failed to ex
我正在使用 OpenDataKit 的 ODK collect 在现场收集调查数据。目前我正在使用 ODK 聚合在谷歌云上接受数据提交,然后再下载为 CSV 文件。整个过程有些令人沮丧,因为每一步都容
我正在开发一个由 ODK Android 应用程序访问的网络应用程序 ( https://opendatakit.org/ )。我正在做的工作需要 https 连接。然而,ODK 返回 javax.n
我是一名优秀的程序员,十分优秀!