我试图覆盖Android中的信任管理器。我想让基础信任管理器检查证书,但是我需要确定证书是否过期。如果证书已过期,我需要忽略它并接受证书。如果取出电池,某些移动设备会将日期重置为旧日期,从而导致证书看起来好像过期了。即使发生这种情况,我的应用也必须继续保持运行状态。
我遇到的问题是,此行代码引发NullPointerException:
origTrustmanager.checkServerTrusted(certs, authType);
Run Code Online (Sandbox Code Playgroud)
根据文档,checkServerTrusted绝不应抛出NullPointerExeption。certs有两个项目。authType设置为“ RSA”。如果我没有实现自定义的信任管理器,则会抛出一个异常,该异常清楚地表明证书已过期,因此我知道底层的信任管理器正在执行其工作。即使我将设备上的日期和时间设置在证书的有效期内,上面的checkServerTrusted行也会生成异常。为什么?显然我做错了。这是我的自定义信任管理器的代码以及如何访问Url:
class SSLTrustManager
{
private X509TrustManager origTrustmanager;
public SSLTrustManager()
{
try
{
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init((KeyStore) null);
TrustManager[] trustManagers = tmf.getTrustManagers();
this.origTrustmanager = (X509TrustManager) trustManagers[0];
}
catch (Exception ex)
{
}
}
public javax.net.ssl.SSLSocketFactory GetSocketFactory()
{
try
{
TrustManager[] wrappedTrustManagers = new TrustManager[] {
new X509TrustManager()
{
public java.security.cert.X509Certificate[] getAcceptedIssuers()
{
return origTrustmanager.getAcceptedIssuers();
}
public void checkClientTrusted(X509Certificate[] certs, String authType)
{
try
{
origTrustmanager.checkClientTrusted(certs, authType);
}
catch (CertificateException e)
{
}
}
public void …Run Code Online (Sandbox Code Playgroud) 对不起我的英语不好。我需要从网址加载图片,但网址使用HTTPS协议。我尝试通过android libruary ImageLoader加载图像,但出现错误:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Run Code Online (Sandbox Code Playgroud)
我如何在HTTPS协议中加载图像?
我的例子:
在主要活动中:
DisplayImageOptions mDisplayImageOptions = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.abc_ab_share_pack_mtrl_alpha)
/*.showImageOnLoading(R.drawable.loading_bg)
.showImageOnLoading(R.drawable.loading_bg)*/
.cacheInMemory(true)
.cacheOnDisc(true)
.build();
ImageLoaderConfiguration conf = new ImageLoaderConfiguration.Builder(context)
.defaultDisplayImageOptions(mDisplayImageOptions)
.memoryCacheSize(50 * 1024 * 1024)
.discCacheSize(50 * 1024 * 1024)
.denyCacheImageMultipleSizesInMemory()
.diskCacheExtraOptions(250, 250, null)
.threadPoolSize(5)
.writeDebugLogs()
.build();
mImageLoader = ImageLoader.getInstance();
mImageLoader.init(conf);
Run Code Online (Sandbox Code Playgroud)
并在适配器中
imageLoader.displayImage(image.get(position).getLinkImge(),holder.image);
Run Code Online (Sandbox Code Playgroud)