首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >主机名在棒棒糖设备中不匹配,但在邮递员和棉花糖设备中工作得很好。

主机名在棒棒糖设备中不匹配,但在邮递员和棉花糖设备中工作得很好。
EN

Stack Overflow用户
提问于 2017-03-29 10:23:56
回答 1查看 345关注 0票数 0

最近,SSL证书被添加到服务器上,因此我已经将android中的url从http://appname.com更改为https://www.appname.com,这在棉花糖设备和邮递员上运行良好,但在Lollipop设备上抛出javax.net.ssl.SSLException: hostname证书不匹配: www.appname.com != www.companyname.com或www.companyname.com或companyname.com

我尝试过在companyname.com中添加setHostnameVerifier,但是没有帮助。以下是代码:

代码语言:javascript
运行
复制
 HashMap<String, String> postDataParams=new HashMap<>();
        postDataParams.put("u_phone",CN);
        postDataParams.put("u_code",st);
        postDataParams.put("device_flag",mob_device);
        postDataParams.put("app_type","PRO");
        HostnameVerifier hostnameVerifier = new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                HostnameVerifier hv =
                        HttpsURLConnection.getDefaultHostnameVerifier();
                return hv.verify("companyname.com", session);
            }
        };


        try{

            URL url = new URL("https://www.appname.com/sync/validatecheck.php");
            HttpsURLConnection urlConnection =
                    (HttpsURLConnection)url.openConnection();
            //urlConnection.setHostnameVerifier(hostnameVerifier);
            urlConnection.setReadTimeout(10000);
            urlConnection.setConnectTimeout(15000);
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);

            OutputStream os = urlConnection.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getPostDataString(postDataParams));

            writer.flush();
            writer.close();
            os.close();
            int responseCode=urlConnection.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {
                String line;
                BufferedReader br=new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                while ((line=br.readLine()) != null) {
                    result+=line;
                }
            }
            else {
                result="";

            }
        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection "+e.toString());
        }

这里可能有什么问题?以及如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 12:02:29

此错误意味着已颁发证书的主机名(subject中的CN字段)与服务器名不匹配。

如果您使用的是URL https://www.appname.com,那么证书应该颁发给www.appname.com*.appname.com。证书的主机名为appname.com,则错误是正确的,您可以使用https://appname.com,但不能使用https://www.appname.com.

https://appname.com中部署服务器,为www.appname.com颁发新证书或设置允许www.appname.comHostnameVerifier

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43090874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档