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

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

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

  就其根本缘由是:证书文件被篡改了。微信

是什么篡改它了? 是maven!maven

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


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

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

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("证书密钥文件流关闭失败.");
				}
			}

		}

	}
相关文章
相关标签/搜索