hi,大家好啊!过了这么多天终于来给大家更新博客了,今天我遇到了一个问题(终于轮到你出问题了,嘲笑!)
好了,进入正题吧!我来说说我今天是怎么遇到这个问题的,当我要构建自己的一套图片处理的方式,也就是打包Glide的操作,放入Generated API中,可以理解为是一种批处理。并且自建了一个这样的moudle文件的子类(继AppGlideModule):
然后我Make Module,让AppGlideModule子类编译产生新的api,但是当我要make module时,错误出现了:
Cause: unable to find valid certification path to requested target
原因:找不到请求目标的有效证书路径
于是我抱着这个问题跑去问了度大仙,很多博主都是要求我去验证证书是否有效,突然去安装证书,不同的浏览器操作方法还不同:
谷歌浏览器
火狐浏览器
当然可能这是一种多数情况下比较可行的方法,但是今天巧了,我遇到的这个问题恰恰这个方法不可行,因为这个问题产生的原因就是有点点的与众不同,上面已经说过了,下面就说说我是怎么解决掉的吧:
原来在我导入阿里云云仓的时候网络协议http://…本来应该是https://…如下图:
buildscript {
repositories {
google()
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
//阿里云云仓镜像包
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
//阿里云云仓镜像包
jcenter()
}
因为我在make module的时候,
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
annotationProcessor 'androidx.annotation:annotation:1.0.0'
implementation("com.github.bumptech.glide:glide:4.9.0") {
exclude group: "com.android.support"
}
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
**//因为我在make module的时候,该条依赖包是以https://....这样的网络协议去进行网络访问的,而当时我在导入阿里云云仓镜像包的时候没有加s的,即http://...这样式的!!**
}
这样就是默认androidstudio只能以http://…的形式去进行网络访问,于是当以https://…这样的形式去拉取glide的依赖包时产生冲突,无法访问相应的网址,就有了无效证书这种错误。解决方法显而易见,阿里云云仓镜像包改为https://…
后来我又去深入理解了一下,http://…和https://…到底有什么区别:
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加 密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基 础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
HTTPS和HTTP的主要区别
https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
想了解https到底是怎么进行网络通信:网址
所以在遇到类似的错误时,不要一味的相信大众的方法,还是要好好考虑考虑自己的问题究竟是怎么产生的。
总结:思路要拓宽,特殊问题要特殊对待,报错要由结果推理到源头;逆向思维很重要!!!