当前位置: 首页 > news >正文

电商类网站开发定制用html网站建设过程

电商类网站开发定制,用html网站建设过程,网络优化论文,专做英文类网站目录前言启用https后白屏#xff08;证书错误#xff09;修改处理WebView中Http和Https混合问题处理办法Webview的几种内容加载模式证书配置或处理https请求的证书okhttp进行请求#xff1a;HttpsURLConnection忽略证书前言 原有项目中有部分界面是用webview展现的h5页面证书错误修改处理WebView中Http和Https混合问题处理办法Webview的几种内容加载模式证书配置或处理https请求的证书okhttp进行请求HttpsURLConnection忽略证书前言 原有项目中有部分界面是用webview展现的h5页面一直以来都使用的http地址但有些情况下用户dns被劫持页面上出现了一些广告的内容或者页面就是白屏总结起来还是因为使用http页面内容被劫持修改修改后的内容要么多出广告要么被修改得加载不出来因此项目中自然就需要加载https的地址。同时修改为https之后出现问题的那些用户也能正常的显示出h5页面内容。 启用https后白屏证书错误 然而在新版本上线后有客户反馈oppo(8.1)、vivo等用户反馈app中页面白屏单位的oppo和vivo验证都没有问题。最后小伙伴用模拟器复现了同时也看到错误日志 此处的日志是在WebChromeClient的重实现打出来的代码已经修改过 Overridepublic void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {GenseeLog.e(TAG,onReceivedSslError sslErrorHandler [ sslErrorHandler ], sslError [ sslError ]);_onReceivedError();super.onReceivedSslError(webView, sslErrorHandler, sslError);}修改处理 得知是在WebChromeClient的onReceivedSslError重实现中响应了相关的错误在onReceivedSslError中调用sslErrorHandler.process(); 就可以了忽略证书问题。 public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {GenseeLog.e(TAG,onReceivedSslError sslErrorHandler [ sslErrorHandler ], sslError [ sslError.getPrimaryError() ]);_onReceivedError();sslErrorHandler.proceed(); // super.onReceivedSslError(webView, sslErrorHandler, sslError);}此处注意不要调用super.onReceivedSslError(webView, sslErrorHandler, sslError),super的实现是sslErrorHandler.cancel();,终止访问。 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {handler.cancel();} 注意文本是通过忽略证书的问题处理的但从实质性的安全来说并没起到作用。确认我们的证书是无误的。唯独几个oppo(系统8.1)和vivo用户有问题目前没有得到真机的验证推测还是系统证书下载问题。有知道的老铁请留言感谢之。 正确建议做法是做证书校验 webView.setWebViewClient(new WebViewClient() {overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {String msg;switch(error.getPrimaryError()) {case: SslError.SSL_DATE_INVALIDmsg 证书日期无效break;case: SslError.SSL_EXPIREDmsg 证书已过期。break;case: SslError.SSL_IDMISMATCH msg 主机名不匹配。break;case: SslError.SSL_INVALID msg 发生一般错误break;case: SslError.SSL_MAX_ERRORmsg 不同SSL错误的数量。break;case: SslError.SSL_NOTYETVALIDmsg 证书尚未生效。break;case: SslError.SSL_UNTRUSTEDmsg 证书颁发机构不受信任。 // 自定义证书会执行到这个分支来break;default:msg SSL证书错误,错误码 error.getPrimaryError();}Log.i(SSL错误 msg)if (error.getPrimaryError() SslError.SSL_UNTRUSTED) {// 证书颁发机构不受信任则我们需要判断一下是否是我们自己的自定义证书是的话就忽略这个错误CertificateFactory certificateFactory CertificateFactory.getInstance(X.509);X509Certificate certificate certificateFactory.generateCertificate(resources.openRawResource(R.raw.xxx)) ;Field mX509CertificateFiled SslCertificate.getClass().getDeclaredField(mX509Certificate);mX509CertificateFiled .setAccessible( true);X509Certificate mX509Certificate mX509CertificateFiled.get(error.certificate());val certificates HandshakeCertificates.Builder().addTrustedCertificate(certificate) // 信任指定的自定义证书.addPlatformTrustedCertificates() // 信任系统的预装证书如果不信任系统证书的话比如在访问https://m.baidu.com时将会出错.build()try {certificates.trustManager.checkServerTrusted(new X509Certificate []{mX509Certificate}), RSA)Log.i(是我们的自定义证书)handler.proceed()} catch (e: java.lang.Exception) {Log.e(e, 非法证书)handle.cancel()}}} else {super.onReceivedSslError(view, handler, error)}} }); WebView中Http和Https混合问题 在一个页面通过http请求的但页面内有https的资源后者页面是通过https访问的但页面内有http的资源这样的混合一般后者都存在问题当前前者也可能存在问题。 处理办法 在webview加载页面之前设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW if (Build.VERSION.SDK_INT Build.VERSION_CODES.LOLLIPOP) {webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}在Android5.0之前系统默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式即总是允许WebView同时加载Https和Http而从Android5.0开始默认用MIXED_CONTENT_NEVER_ALLOW模式即总是不允许WebView同时加载Https和Http。 如果都是自家的网页那这个问题还是从源头上进行处理页面不要使用混合的方式。 官网给出的建议是为了安全考虑使用 MIXED_CONTENT_NEVER_ALLOW模式但是在实际引用中当我们的服务器已经升级到Https但是一些页面的资源是第三方的我们不一定能要求第三方也都升级到Https所以我们只能根据系统版本用代码去设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW。 Webview的几种内容加载模式 从Android5.0开始当一个安全的站点https去加载一个非安全的站点http时需要配置Webview加载内容的混合模式一共有如下三种模式 MIXED_CONTENT_NEVER_ALLOWWebview不允许一个安全的站点https去加载非安全的站点内容http,比如https网页内容的图片是http链接。强烈建议App使用这种模式因为这样更安全。MIXED_CONTENT_ALWAYS_ALLOW在这种模式下WebView是可以在一个安全的站点Https里加载非安全的站点内容Http,这是WebView最不安全的操作模式尽可能地不要使用这种模式。MIXED_CONTENT_COMPATIBILITY_MODE在这种模式下当涉及到混合式内容时WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容Http能被加载到一个安全的站点上Https而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染但是又希望在一个安全的环境下运行。 证书配置或处理 如果需要配置证书的情况下 在res目录下创建一个xml文件目录再创建一个network_security_config.xml名字可随意然后就是在这个文件中写入一些关于https的配置接着把network_security_config配置到Anroidmanifest的Application节点属性中如下 applicationandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:networkSecurityConfigxml/network_security_config/application 我们的xxx.crt的证书文件按照规范需要放到res/raw/目录下面。接着配置到network_security_config文件中。配置证书有两种方式如下 base-config 表示应用的访问的所有域名的资源都信任我们指定的xxx证书 ?xml version1.0 encodingutf-8? network-security-configbase-configtrust-anchorscertificates srcraw/xxx //trust-anchors/base-config /network-security-config domain-config 使用domain-config限制了gensee.com或它的子域名都信任我们指定的xxx证书 ?xml version1.0 encodingutf-8? network-security-configdomain-configdomain includeSubdomainstruegensee.com/domaintrust-anchorscertificates srcraw/xxx//trust-anchors/domain-config /network-security-config 指定信任预安装的证书 配置我们要信任什么证书直接使用raw/xxx为配置信任自定义的证书如果要指定信任预安装的证书需要另外指定预安装的证书有系统和用户两种类型如下 ?xml version1.0 encodingutf-8? network-security-configbase-configtrust-anchorscertificates srcraw/custom_ca / !--信任自定义的CA证书--certificates srcsystem / !--信任系统预装的CA证书--certificates srcuser / !--信任用户安装的CA证书--/trust-anchors/base-config /network-security-config https请求的证书 okhttp进行请求 val builder OkHttpClient.Builder() if (Build.VERSION.SDK_INT Build.VERSION_CODES.N) {val certificateFactory: CertificateFactory CertificateFactory.getInstance(X.509)val certificate certificateFactory.generateCertificate(resources.openRawResource(R.raw.xxx)) as X509Certificateval certificates HandshakeCertificates.Builder().addTrustedCertificate(certificate) // 信任指定的自定义证书.addPlatformTrustedCertificates() // 信任系统的预装证书如果不信任系统证书的话比如在访问https://m.baidu.com时将会出错.build()builder.sslSocketFactory(certificates.sslSocketFactory(), certificates.trustManager) } val okHttpClient builder.build() HttpsURLConnection // Load CAs from an InputStream// (could be from a resource or ByteArrayInputStream or ...)val cf: CertificateFactory CertificateFactory.getInstance(X.509)// From https://www.washington.edu/itconnect/security/ca/load-der.crtval caInput: InputStream BufferedInputStream(FileInputStream(load-der.crt))val ca: X509Certificate caInput.use {cf.generateCertificate(it) as X509Certificate}System.out.println(ca ca.subjectDN)// Create a KeyStore containing our trusted CAsval keyStoreType KeyStore.getDefaultType()val keyStore KeyStore.getInstance(keyStoreType).apply {load(null, null)setCertificateEntry(ca, ca)}// Create a TrustManager that trusts the CAs inputStream our KeyStoreval tmfAlgorithm: String TrustManagerFactory.getDefaultAlgorithm()val tmf: TrustManagerFactory TrustManagerFactory.getInstance(tmfAlgorithm).apply {init(keyStore)}// Create an SSLContext that uses our TrustManagerval context: SSLContext SSLContext.getInstance(TLS).apply {init(null, tmf.trustManagers, null)}// Tell the URLConnection to use a SocketFactory from our SSLContextval url URL(https://certs.cac.washington.edu/CAtest/)val urlConnection url.openConnection() as HttpsURLConnectionurlConnection.sslSocketFactory context.socketFactoryval inputStream: InputStream urlConnection.inputStreamcopyInputStreamToOutputStream(inputStream, System.out) 忽略证书 /** 获取一个SSLSocketFactory */ val sSLSocketFactory: SSLSocketFactoryget() try {val sslContext SSLContext.getInstance(SSL)sslContext.init(null, arrayOf(trustManager), SecureRandom())sslContext.socketFactory} catch (e: Exception) {throw RuntimeException(e)}/** 获取一个忽略证书的X509TrustManager */ val trustManager: X509TrustManagerget() object : X509TrustManager {override fun checkClientTrusted(chain: ArrayX509Certificate, authType: String) { } override fun checkServerTrusted(chain: ArrayX509Certificate, authType: String) { } override fun getAcceptedIssuers(): ArrayX509Certificate { return arrayOf() }} 将这两个对象设置给okhttp或HttpsURLConnection即可完成证书忽略。 https://blog.csdn.net/android_cai_niao/article/details/108065766 https://blog.csdn.net/luofen521/article/details/51783914
http://www.zqtcl.cn/news/339723/

相关文章:

  • 2w网站建设模式百度应用市场
  • vps主机访问网站湖南建站网站
  • 滨州正规网站建设公司用r语言 做网站点击热力图
  • php网站模板wordpress自定义头像上传
  • 江油市规划和建设局网站一个app网站
  • 郑州网站建设up188WordPress响应式幻灯片
  • 幸运28网站代理怎么做网站后期维护工作包括哪些
  • 西安网站建设seo网络营销的职能
  • 大型网站建设哪家服务好dll网站服务
  • 怎样建设网赌网站江苏外贸网站建设
  • 做外贸有哪些网站怎么在360自己做网站
  • 企业网站建立费用 作什么科目深圳服装外贸公司
  • 淘宝网站建设代码视频开放api
  • 清廉企业建设骨科医院网站优化服务商
  • 公司网站建设开源平台网站建设推来客在哪里
  • 本地电脑静态网站建设半年工作总结
  • 潮州哪里做网站html in wordpress
  • 在浏览器上建设网站平面作品集展示图片
  • 建设网站的技术手段天津泰达建设集团网站
  • 怎样做读书会网站广州公司注册在线
  • 多个网站做计划响水哪家专业做网站
  • 中国建设基础设施总公司 网站怒江网站建设
  • 做电脑网站手机能显示不出来怎么办有友情链接的网站
  • 潘家园做网站的公司网络营销管理系统
  • 如何在各大平台推广博客网站seo
  • 网站地图那么建设国内哪个网站做水产比较大
  • 可以做图片视频的网站网站策划网
  • 在阿里云做的网站怎么移动南宁seo咨询
  • 电子商务网站开发课程设计论文温州市微网站制作电话
  • 常州住房和城乡建设部网站网站开发哪家公司口碑好