首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:无法通过HTTPS访问本地网站

Android:无法通过HTTPS访问本地网站
EN

Stack Overflow用户
提问于 2012-07-09 04:52:42
回答 1查看 601关注 0票数 0

我正在尝试访问一个本地托管的网站,并获得其HTML源代码进行解析。我有几个问题:

1)我可以使用"https://An IP ADDRESS HERE“作为有效的URL来尝试访问吗?我不想在/etc/hosts文件中进行更改,所以我希望这样做。

2)我无法获取html,因为它给了我握手异常和证书问题。我尝试了很多网络上可用的帮助,但都不成功。

下面是我使用的代码:

代码语言:javascript
复制
public class MainActivity extends Activity {
    private TextView textView;
    String response = "";
    String finalresponse="";


    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.TextView01);
        System.setProperty("javax.net.ssl.trustStore","C:\\User\\*" );
        System.setProperty("javax.net.ssl.trustStorePassword", "" );
    }

    private class DownloadWebPageTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {



            TrustManager[] trustAllCerts = new TrustManager[] {
                new X509TrustManager() {
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
                    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                    }
                    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                    }
                }
            };

            try {
                SSLContext sc = SSLContext.getInstance("SSL");
                sc.init(null, trustAllCerts, new java.security.SecureRandom());
                HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            } catch (Exception e) {
            }


            try {
                URL url = new URL("https://172.27.224.133");

                HttpsURLConnection con =(HttpsURLConnection)url.openConnection();

                con.setHostnameVerifier(new AllowAllHostnameVerifier());
                finalresponse=readStream(con.getInputStream());
            } catch (Exception e) {
                e.printStackTrace();
            }
            return finalresponse;
        }

        private String readStream(InputStream in) {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new InputStreamReader(in));
                String line = "";
                while ((line = reader.readLine()) != null) {
                    response+=line;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return response;
        } 


        @Override
        protected void onPostExecute(String result) {
            textView.setText(finalresponse);
        }
    }

    public void readWebpage(View view) {
        DownloadWebPageTask task = new DownloadWebPageTask();
        task.execute(new String[] { "https://172.27.224.133" });
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-09 04:58:56

使用https://local-ip-address访问受SSL保护的网页的问题是,这很可能导致浏览器信任网站的SSL证书的问题。

这是因为浏览器将尝试通过检查HTTPS URL中使用的主机名是否与SSL证书中包含的CN=主机名匹配来验证SSL证书。

更新,删除了对本地主机的引用(我最初认为本地托管的网站意味着与浏览器在同一服务器上,但在安卓上显然不是这样) :

通过更改本地主机表以包括SSL证书中包含的完全限定主机名,并将该名称与要使用的特定IP地址相关联,可以避免此验证错误。

/etc/中硬编码IP地址的主机替代方案

如果您可以控制如何创建SSL证书,则可以使用Subject Alternate Names或SAN向证书添加额外的主机名甚至IP地址。如果您使用的是自签名证书,这可能是一个可行的选择。

但是,如果您的本地托管网站也是从Internet访问的,您很可能会使用购买的SSL证书,并且将IP地址硬编码到这样的证书中很可能会导致支持问题,因为内部IP地址可能会随着时间的推移而更改,需要重新购买SSL证书。

另一种选择可能是将您的内部IP地址硬编码到移动设备正在使用的DNS服务器中,前提是您可以控制该服务器。

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

https://stackoverflow.com/questions/11386618

复制
相关文章

相似问题

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