經過在stackoverflow和博客如antonie,vipul上的各種論壇大量的研究,我仍然unbale仍然解決這個錯誤「沒有同行證書」。在android中創建https連接
我使用的代碼是完全一樣給予這個blog entry
但儘管如此,我得到一個例外。我也創建了.bks
文件並在代碼中使用它。請不要將其標記爲重複,不回答我如何信任所有證書,因爲我已經研究了
我已經使用這個代碼:
public class MyHttpClient extends DefaultHttpClient {
final Context context;
public MyHttpClient(Context context) {
this.context = context;
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
// Register for port 443 our SSLSocketFactory with our keystore
// to the ConnectionManager
registry.register(new Scheme("https", newSslSocketFactory(), 443));
return new SingleClientConnManager(getParams(), registry);
}
private SSLSocketFactory newSslSocketFactory() {
try {
// Get an instance of the Bouncy Castle KeyStore format
KeyStore trusted = KeyStore.getInstance("BKS");
// Get the raw resource, which contains the keystore with
// your trusted certificates (root and any intermediate certs)
InputStream in = context.getResources().openRawResource(R.raw.cacer);
// FileInputStream in = new FileInputStream(new File("key.bks"));
try {
trusted.load(in, "govill".toCharArray());
// Initialize the keystore with the provided trusted certificates
// Also provide the password of the keystore
} finally {
in.close();
}
// Pass the keystore to the SSLSocketFactory. The factory is responsible
// for the verification of the server certificate.
SSLSocketFactory sf = new SSLSocketFactory(trusted);
// Hostname verification from certificate
// http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
return sf;
} catch (Exception e) {
System.out.print(e);
throw new AssertionError(e);
}
}
}
是服務器您想要爲SSL配置的連接?他有沒有有效的證書?另外,也許最重要的是,您是否使用自簽名證書,並且您希望服務器向用戶進行身份驗證,反之亦然,還是僅僅是第一種情況? – Eric