Certificate Downloader 是Java 微信支付APIv3 平台憑證的命令列下載工具。此工具可從https://api.mch.weixin.qq.com/v3/certificates
介面取得商家可用證書,並使用APIv3 金鑰和AES_256_GCM 演算法進行解密,並把解密後憑證下載到指定位置。
工具使用了wechatpay-apache-httpclient、Maven、picocli、gson、lombok 等函式庫。
該工具已透過Maven 打包成CertificateDownloader.jar,可在release 中下載。
下載jar 套件後,如果你沒有證書,第一次下載證書的命令如下,具體說明請看常見問題-第一次下載證書:
java -jar CertificateDownloader.jar -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}
如果你已有微信支付平台證書,完整指令如:
java -jar CertificateDownloader.jar -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath} -c ${wechatpayCertificateFilePath}
必需參數有:
-f <privateKeyFilePath>
,商家API私鑰檔案路徑-k <apiV3Key>
,憑證解密的金鑰-m <merchantId>
,商家號-o <outputFilePath>
,儲存憑證的路徑-s <merchantSerialNo>
,商家API憑證的序號非必需參數有:
-c <wechatpayCertificatePath>
,微信支付平台憑證的路徑。如果你還沒有證書,請先不傳該參數。你也可以執行java -jar CertificateDownloader.jar -h
,查看幫助:
工具做了以下安全措施:
下載證書後,如果仍然擔心證書出錯,可:
使用openssl 工具,透過憑證信任鏈驗證平台憑證:
首先,從微信支付商家平台下載平台憑證信任鏈CertTrustChain.p7b,並將它轉換為pem 憑證格式:
openssl pkcs7 -print_certs -in CertTrustChain.p7b -inform der -out CertTrustChain.pem
然後,-CAfile file 指定受信任的證書,驗證下載的平台證書:
openssl verify -verbose -CAfile ./CertTrustChain.pem ./WeChatPayPlatform.pem
對於微信支付的應答,需要使用平台證書來進行驗簽;但平台證書只能透過取得平台證書介面下載,所以當第一次去獲取證書時,會出現個「死循環」。
為解決這個“死循環”,可以暫時跳過驗簽,來獲得證書。也就是說可以不提供微信支付憑證參數(-c 參數)來下載,下載得到憑證後,工具會使用下載得到的憑證對封包的簽章進行驗證。
第一次下載證書後,我們強烈建議參考如何透過證書信任鏈驗證平台證書,以驗證證書的真實性。
有的: