https выложить на андроид - PullRequest
0 голосов
/ 05 апреля 2011

Мне нужно https опубликовать на сервере базы данных.Я искал SO и Google и нашел несколько примеров и сообщений по этой проблеме, но все еще не могу понять, что люди публикуют для решения.Может кто-нибудь проанализировать, что у меня есть, и сказать, что мне нужно изменить, чтобы это заработало?Я согласен с принятием всех сертификатов, мне просто нужен самый быстрый и простой способ решения этой проблемы.Я в крайнем сроке, и это моя работа.Ошибка, которую я получаю, публикуется вместе с кодом.

Код, который я разместил ниже, является частью вспомогательного класса, который я сделал для помощи во всех моих http-публикациях.больше информации, дайте мне знать, спасибо заранее!Спасибо, спасибо!

public static synchronized int authenticate(String uName, String pWord) {
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("action", "authentication"));
    nameValuePairs.add(new BasicNameValuePair("username", "uName"));
    nameValuePairs.add(new BasicNameValuePair("password", "pWord"));

    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("https://ipaddress/link/admin.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        String responseBody = EntityUtils.toString(response.getEntity());
        Log.v("smartdbhelper authenticate", responseBody);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
}   

04-05 03:47:19.415: WARN/System.err(279): javax.net.ssl.SSLException: Not trusted server certificate
04-05 03:47:19.437: WARN/System.err(279):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)
04-05 03:47:19.446: WARN/System.err(279):     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)
04-05 03:47:19.446: WARN/System.err(279):     at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
04-05 03:47:19.476: WARN/System.err(279):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164)
04-05 03:47:19.476: WARN/System.err(279):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-05 03:47:19.486: WARN/System.err(279):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-05 03:47:19.486: WARN/System.err(279):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
04-05 03:47:19.495: WARN/System.err(279):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-05 03:47:19.506: WARN/System.err(279):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-05 03:47:19.506: WARN/System.err(279):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
04-05 03:47:19.516: WARN/System.err(279):     at cpe495.smartapp.SmartDBHelper.authenticate(SmartDBHelper.java:50)
04-05 03:47:19.525: WARN/System.err(279):     at cpe495.smartapp.DataSender.submitData(DataSender.java:22)
04-05 03:47:19.525: WARN/System.err(279):     at cpe495.smartapp.DataSender.sendData(DataSender.java:17)
04-05 03:47:19.525: WARN/System.err(279):     at cpe495.smartapp.SmartApp$1.dataReceivedReceived(SmartApp.java:48)
04-05 03:47:19.536: WARN/System.err(279):     at cpe495.smartapp.ConnectDevice.fireDataReceivedEvent(ConnectDevice.java:79)
04-05 03:47:19.536: WARN/System.err(279):     at cpe495.smartapp.ConnectDevice.run(ConnectDevice.java:46)
04-05 03:47:19.536: WARN/System.err(279):     at java.lang.Thread.run(Thread.java:1096)
04-05 03:47:19.547: WARN/System.err(279): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
04-05 03:47:19.566: WARN/System.err(279):     at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)
04-05 03:47:19.566: WARN/System.err(279):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)
04-05 03:47:19.576: WARN/System.err(279):     ... 16 more
04-05 03:47:19.576: WARN/System.err(279): Caused by: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
04-05 03:47:19.616: WARN/System.err(279):     at org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:149)
04-05 03:47:19.616: WARN/System.err(279):     at java.security.cert.CertPathValidator.validate(CertPathValidator.java:202)
04-05 03:47:19.626: WARN/System.err(279):     at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:164)
04-05 03:47:19.626: WARN/System.err(279):     ... 17 more

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Я только что закончил реализацию концепции по этой ссылке:

http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html

Что сработало для меня.Чуть более длинное решение, чем было после, но я не нашел другого способа использования HttpClient.Также проверьте этот вопрос для некоторых других идей:

Https Connection Android

0 голосов
/ 05 апреля 2011

Похоже, вам нужно сообщить клиенту , какой сертификат центра сертификации (CA) использовать при проверке сертификата сервера .

Если у вас есть административный контроль над рассматриваемым сервером, вы можете выбрать центр сертификации, который уже находится в списке «доверенных» на Android (по крайней мере, я предполагаю, что Android поставляется с несколькими десятками предустановленных, как и большинство веб-браузеров), или вы можете добавить CA под вашим контролем через TrustAnchor, который будет соответствовать вашему приложению. (Это, вероятно, более дешевый подход, но если вы когда-нибудь захотите, чтобы люди использовали ваш веб-сайт вне приложения, вы можете просто потратить 100 долларов в год на сертификат.)

...