微信加載證書失敗,怎麼辦?看這裏

後面有一段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("證書密鑰文件流關閉失敗.");
				}
			}

		}

	}
相關文章
相關標籤/搜索