首页 > 解决方案 > 未找到证书路径的信任锚 - 带有 Volley 的 https POST 请求不起作用

问题描述

这个问题经常被问到,但所有的答案都是 2 或 3 岁。我登录了我的 Android 应用程序,日期保存在我的云服务器上的 MySQL 数据库中,该数据库具有 SSL 证书。当我在本地机器上测试我的应用程序时,一切都很好,但是当我尝试与我的云服务器连接时,我收到消息“找不到证书路径的信任锚”。我的凭证没问题。我知道我必须设置一个 sslSocketFactory。我尝试了很多,但一个有效。我现在坐了好几天。可能有人知道如何解决

这里我的代码没有 sslSocketFactory

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.logintest, container, false);

        btn_login = view.findViewById(R.id.btn_logintest);
        email = view.findViewById(R.id.etEmail);
        password = view.findViewById(R.id.etPassword);

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                login();
            }

            public void login() {

                str_email = email.getText().toString();
                str_password = password.getText().toString();

                if(!str_email.equals("") && !str_password.equals("")) {

                    StringRequest request = new StringRequest(Request.Method.POST, URL_LOGIN, new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            
                            FragmentManager fragmentManager = getFragmentManager();
                            FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
                            DummyFragment dummyFragment = new DummyFragment();
                            fragmentTransaction.replace(R.id.container,dummyFragment);
                            fragmentTransaction.addToBackStack(null);
                            fragmentTransaction.commit();

                            Log.e("Text: ", response);
                            Toast.makeText(getActivity(), "erfolgreicher Text: " +response, Toast.LENGTH_LONG).show();
                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getActivity(), "Text: " +error.getMessage().toString(), Toast.LENGTH_SHORT).show();
                        }
                    }
                    ) {
                        @Override
                        protected Map<String, String> getParams() throws AuthFailureError {
                            Map<String, String> params = new HashMap<>();
                            params.put("str_email", email.getText().toString());
                            params.put("str_password", password.getText().toString());
                            return params;
                        }

                        @Override
                        public Map<String, String> getHeaders() throws AuthFailureError {
                            try {
                            HashMap<String, String> headers = new HashMap<>();
                                String credentials = "xxxxxxxxx:xxxxxxxxxx";
                                String auth = "Basic "
                                        + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
                            headers.put("Content-Type", "application/json");
                            headers.put("Authorization", auth);
                            return headers;
                        } catch (Exception e) {
                                Log.e(TAG, "Authentication failure");
                                Toast.makeText(getActivity(), "" +e, Toast.LENGTH_LONG).show();
                            }
                            return super.getHeaders();
                        }
                    };
                    RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
                    requestQueue.add(request);
                }
                else {
                    if (email.getText().toString().equals("")) {
                        Toast.makeText(getActivity(), "Bitte Email Adresse eingeben", Toast.LENGTH_SHORT).show();
                    } else if (password.getText().toString().equals("")) {
                        Toast.makeText(getActivity(), "Bitte Passwort eingeben", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        return view;
    }
}

我尝试了来自 android 开发者页面的代码,但出现了一些错误。我试图设置 network_security.xml 但它对我不起作用。当我用邮递员测试我的凭据时,我得到响应 200。

标签: android-volleysslsocketfactory

解决方案


推荐阅读