微信加载证书失败,怎么办?看这里

后面有一段java代码,它引发了下面两个问题。

第一类问题:DerInputStream.getLength(): lengthTag=111, too big.  

  就其根本原因是:证书文件被篡改了。

是什么篡改它了? 是maven!

由于我使用了maven的pro配置功能,将证书放在了pro对应的文件中,如果你也是这样做的,请将文件移出来,直接放在一个固定的项目路径文件夹下。这样再次打包就不会被pro干扰,导致文件被篡改了。


第二类问题:Given final block not properly padded

这个问题是因为。我有多个证书,导致文件流和密码不正确导致。我是做的微信支付退款,由于 微信会有多个退款模式:APP的退款、开放平台的退款、等。就会有多个证书了。每种退款都会有一个密码,也就是商户号(op_user_id),如果证书和密码不能对应,就会出现上面的异常了。

tempKeyStore.load(instream, op_user_id.toCharArray());

 

 

 /***
     * *
     * @作者 Dick
     * @TODO 获取keyStore,同步静态方法,只需要创建一个即可
     * @创建时间 2016年1月25日 下午8:45:04
     * @return
     * @修改备注
     **
     */
	public synchronized static KeyStore getKeyStore(String op_user_id,String CERT_PATH) {
		//if(keyStore!=null)return keyStore;
		
		InputStream instream = null;
		String certReallyPath = null;
		KeyStore tempKeyStore = null;
		try {
			// 获取一个keystore,是PKCS12类型
			tempKeyStore = KeyStore.getInstance(KEY_STORE_TYPE);
			logger.info("创建KeyStore成功:"+KEY_STORE_TYPE);
			ClientCustomSSL ccs=new ClientCustomSSL();
			logger.info("获取当前地址"+ccs.getClass().getResource("/").getPath());
			 
			certReallyPath = ccs.getClass().getResource(CERT_PATH).getPath();
			logger.info("获取证书路径成功:"+certReallyPath);
			// 获取密钥文件
			instream =ccs.getClass().getResourceAsStream(CERT_PATH);
			if(instream!=null)
				logger.info("证书文件流获取成功.");
			else
				logger.info("证书文件流获取失败.");
			
			logger.error("op_user_id====================" + op_user_id);
			logger.info("op_user_id====================" + op_user_id);
			
			logger.error("CERT_PATH====================" + CERT_PATH);
	        logger.info("CERT_PATH====================" + CERT_PATH);
			
			tempKeyStore.load(instream, op_user_id.toCharArray());
			logger.info("根据证书证书文件流加载KeyStore成功.");
			keyStore=tempKeyStore;
			return keyStore;
		} catch (FileNotFoundException e) {
			logger.error("微信证书文件不存在:" + certReallyPath, e);
			throw new BaseException("微信证书文件不存在:" + certReallyPath, e);
		} catch (NoSuchAlgorithmException e) {
			logger.error("微信证书加载失败,未能找到相应的算法:" + tempKeyStore.getType(), e);
			throw new BaseException("微信证书加载失败,未能找到相应的算法:"
					+ tempKeyStore.getType(), e);
		} catch (CertificateException e) {
			logger.error("微信证书异常:", e);
			throw new BaseException("微信证书异常:", e);
		} catch (IOException e) {
			logger.error("微信证书文件读取异常:", e);
			throw new BaseException("微信证书文件读取异常:", e);
		} catch (KeyStoreException e) {
			logger.error("微信证书 密钥库异常。:", e);
			throw new BaseException("微信证书 密钥库异常。:", e);
		} finally {
			if (instream != null) {
				try {
					instream.close();
					logger.info("关闭证书读取流.");
				} catch (IOException e) {
					logger.error("证书密钥文件流关闭失败.");
				}
			}

		}

	}


 

 

 

转载于:https://my.oschina.net/u/2553994/blog/678173

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值