android - 如何解决 javax.net.ssl.SSLPeerUnverifiedException : Hostname . com 未验证:

标签 android okhttp

我有以下错误 Hostname domain.com not verified: Not "javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated" 我之前能够连接到不同的主机,在这个主机上我遇到了问题,如何解决它

 javax.net.ssl.SSLPeerUnverifiedException: Hostname domain.com not verified:
    certificate: sha1//WQM9QbrKs6DCFa9qN/EIw1ywBw=
    DN: CN=*.ipage.com,OU=Domain Control Validated - RapidSSL(R),OU=See www.rapidssl.com/resources/cps (c)14,OU=GT29505539
    subjectAltNames: [*.ipage.com, ipage.com]
            at com.squareup.okhttp.Connection.connectTls(Connection.java:244)
            at com.squareup.okhttp.Connection.connectSocket(Connection.java:199)
            at com.squareup.okhttp.Connection.connect(Connection.java:172)
            at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367)
            at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
            at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
            at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
            at com.squareup.okhttp.Call.getResponse(Call.java:267)

这是我的代码

  try {
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.accumulate("name", name);
                    jsonObject.accumulate("password", pass);
                    jsonObject.accumulate("email", emails);
                    json = jsonObject.toString();
                    Log.e("MYAPP", "getjson");

                } catch (JSONException e) {
                    Log.e("MYAPP", "unexpected JSON exception", e);
                }
                try{
                    RequestBody formBody = new FormEncodingBuilder()
                            .add("name", name)
                            .build();
                    Request request = new Request.Builder()
                            .url("https://justedhak.com/Files/users.php")
                            .post(formBody)
                            .build();

最佳答案

更新

因为异常是 javax.net.ssl.SSLPeerUnverifiedException: Hostname justedhak.com not verified with DN: CN=*.ipage.com...subjectAltNames: [*.ipage.com, ipage.com]

因此,您可以将我下面示例代码中的 setHostnameVerifier 替换为以下内容(因为不推荐使用 return true):

client.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                //return true;
                HostnameVerifier hv =
                        HttpsURLConnection.getDefaultHostnameVerifier();
                return hv.verify("ipage.com", session);
            }
        });

您也将获得如下屏幕截图所示的成功结果。


如果您希望使用该主机的HTTPS 只是为了您的学习 目的或开发 环境,您可以引用以下方式,当然你可以通过你的POST一个改变我的GET请求:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.textView);
        mHandler = new Handler(Looper.getMainLooper());
        OkHttpClient client = new OkHttpClient();
        client.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
        Request request = new Request.Builder()
                .url("https://justedhak.com/Files/users.php")
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                // do something...
                Log.e(LOG_TAG, e.toString());
            }

            @Override
            public void onResponse(Response response) throws IOException {
                // do something...
                Log.i(LOG_TAG, response.body().string());
            }
        });
    }

这是截图

BNK's screenshot

您还可以在以下问题中阅读更多信息:

OkHttp trusting certificate

关于android - 如何解决 javax.net.ssl.SSLPeerUnverifiedException : Hostname . com 未验证:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33539929/

相关文章:

java - 如何使用 Intent 而不是 putExtra 将类文件变量获取到另一个 Activity 并通过按钮进行访问?

Android Canvas : Draw only part of precalculated Path

android - 使用 okhttp-signpost 改造 OAuth 签名获取特殊字符的 OAuthMessageSignerException

gradle - 带有OkHTTP的 picasso 无法在其URL中加载包含竖线字符( “|”)的图像

okhttp - 非法状态异常 : response is not eligible for a body and must not be closed

android - android studio 中的数据绑定(bind)基础。 ActivitymainBinding 不是 ViewDataBinding 的子类型

android - 相对布局 : centering of two FrameLayout elements

Android:AsyncTask 的替代品?

android - OkHttp SSLPeerUnverifiedException

android - 如何在 Android 设备上使用 http/2 和 Okhttp?