Http-client를 통해 QuickPay의 서비스 ("https://secure.quickpay.dk/form")에 액세스해야하는 Android 애플리케이션을 개발 중입니다. 하지만 페이지에 액세스 할 때 오류가 계속 발생합니다. 더 구체적으로 "No Peer Certificate"오류 메시지가 나타납니다. 나는 이미 여러 가지를 시도했다. 키 스토어에 루트 인증서를 추가하고이 키 스토어를 연결하는 데이 절차를 따르면서 시도했다 : adding certificate to keystore. 또한 제안 된 방법 (여기에서 accepting certificate for android)에 따라 모든 인증서를 수락하려했습니다. 다른 https 사이트에 성공적으로 연결했지만이 사이트에 연결할 수 없습니다. 다른 Android 기기 (1.6, 2.2 및 2.3.3)에서 시험해 보았습니다. 누구든지 quickpay의 사이트에 연결하는 데 성공할 수 있습니까? 아니면 누군가가 가능한 해결책/수정을 제안 할 수 있습니까?Android에서이 HTTPS 사이트에 연결할 때 "피어 인증서 없음"오류가 발생하지 않도록하려면 어떻게해야합니까?
// 업데이트 : WebView : payment window examples으로이 사이트에 액세스하고 단추 중 하나를 누르면 (기본적으로 일부 미리 정의 된 변수가있는 http 게시가 시작됨) 사이트에 연결할 수 있습니다. 안드로이드 2.3.3에서 webview. 또한 Android 3.1에서 위의 응용 프로그램을 시작하려고하면 사이트에서 답장을 얻습니다. 어떤 제안?
public class MyHttpClient extends DefaultHttpClient {
final Context context;
public MyHttpClient(Context context) {
this.context = context;
loadHttps();
}
private void loadHttps() {
String url = "https://secure.quickpay.dk/form";
HttpPost httpPost = new HttpPost(url);
try {
System.out.println("Executing");
this.execute(httpPost);
} catch (UnsupportedEncodingException e) {
System.out.println(e.getMessage());
} catch (ClientProtocolException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e);
}
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", newSslSocketFactory(), 443));
return new SingleClientConnManager(getParams(), registry);
}
private SSLSocketFactory newSslSocketFactory() {
try {
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = context.getResources().openRawResource(R.raw.test);
try {
trusted.load(in, "mysecret".toCharArray());
} finally {
in.close();
}
SSLSocketFactory sf = new SSLSocketFactory(trusted);
return sf;
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
스택 트레이스 :
WARN/System.err(8459) at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java 258)
WARN/System.err(8459) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java 93)
WARN/System.err(8459) at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java 381)
WARN/System.err(8459) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java 177)
WARN/System.err(8459) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java 164)
WARN/System.err(8459) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java 119)
WARN/System.err(8459) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java 359)
WARN/System.err(8459) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java 555)
WARN/System.err(8459) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java 487)
WARN/System.err(8459) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java 465)
WARN/System.err(8459) at test.https.MyHttpClient.loadHttps(MyHttpClient.java 34)
WARN/System.err(8459) at test.https.MyHttpClient.<init>(MyHttpClient.java 26)
WARN/System.err(8459) at test.https.HttpsTesterActivity.onCreate(HttpsTesterActivity.java 60)
WARN/System.err(8459) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java 1047)
WARN/System.err(8459) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java 1615)
WARN/System.err(8459) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java 1667)
WARN/System.err(8459) at android.app.ActivityThread.access$1500(ActivityThread.java 117)
WARN/System.err(8459) at android.app.ActivityThread$H.handleMessage(ActivityThread.java 935)
WARN/System.err(8459) at android.os.Handler.dispatchMessage(Handler.java 99)
WARN/System.err(8459) at android.os.Looper.loop(Looper.java 123)
WARN/System.err(8459) at android.app.ActivityThread.main(ActivityThread.java 3687)
WARN/System.err(8459) at java.lang.reflect.Method.invokeNative(Native Method)
WARN/System.err(8459) at java.lang.reflect.Method.invoke(Method.java 507)
WARN/System.err(8459) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java 842)
WARN/System.err(8459) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java 600)
일반 사이트 인증서를 얻고있는 인증서입니까 아니면 QuickPay에서 가져온 개인 인증서 (또는 회사)입니까? 어떤 형식입니까? pkx? p12? –
전체 메시지 및 스택 추적을 게시하십시오. – EJP
@ PeterKnego, QuickPay의 사이트에서 루트 인증서를 내 브라우저를 통해 다운로드했습니다. 인증서는 Equifax에서 제공 한 것입니다. 그런 다음 인증서를 Android로로드하기 위해 p12 인증서로 변환했습니다. –