Android - 已安装证书但如何使用它进行连接?
Android - installed certificate but how use it for connection?
我安装了证书(用户),我需要用它来连接服务器。我需要做更多的事情才能将其用于安全连接吗?
通过将证书复制到特定于应用程序的存储来导入证书。
设置包含证书的自定义 KeyStore,然后使用它创建自定义 SSLContext。
一旦我们引用了包含客户端证书和证书密码的文件,我们就会将其加载到适当的密钥库中。
keyStore = KeyStore.getInstance("PKCS12");
fis = new FileInputStream(certificateFile);<br>keyStore.load(fis, clientCertPassword.toCharArray());
现在我们有了包含客户端证书的 KeyStore,我们可以用它来构建 SSLContext:
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(keyStore, clientCertPassword.toCharArray());
KeyManager[] keyManagers = kmf.getKeyManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, null, null);
然后可以将 SSLContext 与 HTTPUrlConnection 一起使用以连接到服务器:
String result = null;
HttpURLConnection urlConnection = null;
try {
URL requestedUrl = new URL(url);
urlConnection = (HttpURLConnection) requestedUrl.openConnection();
if(urlConnection instanceof HttpsURLConnection) {
((HttpsURLConnection)urlConnection)
.setSSLSocketFactory(sslContext.getSocketFactory());
}
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(1500);
urlConnection.setReadTimeout(1500);
lastResponseCode = urlConnection.getResponseCode();
result = IOUtil.readFully(urlConnection.getInputStream());
lastContentType = urlConnection.getContentType();
} catch(Exception ex) {
result = ex.toString();
} finally {
if(urlConnection != null) {
urlConnection.disconnect();
}
}
http://chariotsolutions.com/blog/post/https-with-client-certificates-on/
我安装了证书(用户),我需要用它来连接服务器。我需要做更多的事情才能将其用于安全连接吗?
通过将证书复制到特定于应用程序的存储来导入证书。
设置包含证书的自定义 KeyStore,然后使用它创建自定义 SSLContext。
一旦我们引用了包含客户端证书和证书密码的文件,我们就会将其加载到适当的密钥库中。
keyStore = KeyStore.getInstance("PKCS12");
fis = new FileInputStream(certificateFile);<br>keyStore.load(fis, clientCertPassword.toCharArray());
现在我们有了包含客户端证书的 KeyStore,我们可以用它来构建 SSLContext:
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(keyStore, clientCertPassword.toCharArray());
KeyManager[] keyManagers = kmf.getKeyManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, null, null);
然后可以将 SSLContext 与 HTTPUrlConnection 一起使用以连接到服务器:
String result = null;
HttpURLConnection urlConnection = null;
try {
URL requestedUrl = new URL(url);
urlConnection = (HttpURLConnection) requestedUrl.openConnection();
if(urlConnection instanceof HttpsURLConnection) {
((HttpsURLConnection)urlConnection)
.setSSLSocketFactory(sslContext.getSocketFactory());
}
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(1500);
urlConnection.setReadTimeout(1500);
lastResponseCode = urlConnection.getResponseCode();
result = IOUtil.readFully(urlConnection.getInputStream());
lastContentType = urlConnection.getContentType();
} catch(Exception ex) {
result = ex.toString();
} finally {
if(urlConnection != null) {
urlConnection.disconnect();
}
}
http://chariotsolutions.com/blog/post/https-with-client-certificates-on/