Je suis développeur junior android et application créée, tout a bien fonctionné, mais quand nous avons ajouté la protection SSL aux problèmes de site a commencé. J'ai ajouté key.pem au dossier des actifs et essayé d'utiliser ce example mais cela n'a pas fonctionné. S'il vous plaît aider, comment puis-je résoudre ce problème?Connectez-vous au serveur protégé avec SSL à partir de l'application Android
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gogo);
OkHttpClient client = new OkHttpClient();
SSLContext sslContext = SslUtils.getSslContextForCertificateFile("cert.pem");
client.setSslSocketFactory(sslContext.getSocketFactory());
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://mysite/API/login.php").newBuilder();
urlBuilder.addQueryParameter("username", "xxxxxx");
urlBuilder.addQueryParameter("appkey", "xxxxxxx");
String url = urlBuilder.build().toString();
Request request = new Request.Builder()
.url(String.valueOf(urlBuilder))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Response response) throws IOException {
if (!response.isSuccessful()){
throw new IOException("Unexpected code"+ response);
}
}
});
}
et cette ma pile
W/System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:333) W/System.err: at com.squareup.okhttp.Connection.connectTls(Connection.java:235) W/System.err: at com.squareup.okhttp.Connection.connectSocket(Connection.java:199) W/System.err: at com.squareup.okhttp.Connection.connect(Connection.java:172) W/System.err: at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367) W/System.err: at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128) W/System.err: at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328) W/System.err: at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245) W/System.err: at com.squareup.okhttp.Call.getResponse(Call.java:267) W/System.err: at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224) W/System.err: at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195) W/System.err: at com.squareup.okhttp.Call.access$100(Call.java:34) W/System.err: at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:162) W/System.err: at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33) W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) W/System.err: at java.lang.Thread.run(Thread.java:818) W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:324) W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:225) W/System.err: at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:115) W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:571) W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:329) W/System.err: ... 16 more W/System.err: Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Si tout est configuré correctement, vous n'avez rien de spécial à faire. Il suffit de remplacer l'URL http par un https. – Henry
pouvez-vous s'il vous plaît ajouter le code où vous envoyez réellement la demande, et aussi montrer le problème réel que vous rencontrez? (c'est-à-dire le message d'erreur, la trace de pile, peu importe) – herbert
Quel message d'erreur obtenez-vous et quel certificat le serveur utilise-t-il (est-ce un certificat de confiance valide)? – Henry