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

Android 如何解决javax.net.ssl.SSLPeerUnverifiedException:Hostname.com未验证:,android,okhttp,Android,Okhttp,我遇到以下错误Hostname domain.com未验证:not“javax.net.ssl.SSLPeerUnverifiedException:peer not authenticated”我以前可以连接到不同的主机,在这个主机中我面临问题,如何修复它 javax.net.ssl.SSLPeerUnverifiedException: Hostname domain.com not verified: certificate: sha1//WQM9QbrKs6DCFa9qN/EI

我遇到以下错误
Hostname domain.com未验证:
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未通过
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
one更改我的
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());
            }
        });
    }
这是截图

您还可以阅读以下问题的更多内容:


我在Jenkins尝试访问GIT时也遇到了同样的错误,真正的错误是GIT地址会定期更改(基于AWS),Jenkins的地址是GIT,不再有效。重启jvm就足以解决这个问题,但减少ttl将是最好的解决方案

@Moudiz使用http进行操作,可能服务器上没有httpsside@Moudiz对你必须联系主持人。假设我懒得再写一遍完整的答案:P很高兴我对你有所帮助:)请在下面阅读我的答案我真的很感激你在我所有问题上的帮助,我的问题是我没有从主持人那里购买证书。因此,我以
http
的方式访问php文件,将来可能会使用SSL@BNKIMO,您可以在这里阅读,在
主机名验证的常见问题部分,我的意思是,仅对于“return true”,对于
return hv.verify(“…com”,session)
我不太确定,尽管你可以在谷歌的文档中找到
小心
,好的,我会读一下。顺便说一句,你有关于用户如何登录/注销会话的答案吗?看看这是不是你问的:)@i-Droid我想可以,你可以试试
OkHttpClient client=new-OkHttpClient.Builder().hostnameVerifier(new….build();改装改装=新建改装.Builder().baseUrl(API_URL_BASE).addConverterFactory(GsonConverterFactory.create()).client(client.build()