赞
踩
1. p12文件放在resources目录下
2. P12InfoVo
- import lombok.Builder;
- import lombok.Data;
-
- import java.io.Serializable;
- import java.security.PrivateKey;
- import java.security.PublicKey;
-
-
- /**
- * p12证书VO
- */
- @Data
- @Builder
- public class P12InfoVo implements Serializable{
-
- /**
- * 证书公钥
- */
- private final PublicKey publicKey;
-
- /**
- * 证书私钥
- */
- private final PrivateKey privateKey;
-
- /**
- * 证书序列号
- */
- private final String serialNo;
- }
3. P12Utils
- import com.ruoyi.ruoyils.utils.WxPayUtils;
- import org.junit.Test;
- import sun.security.x509.X509CertImpl;
- import java.io.FileInputStream;
- import java.math.BigInteger;
- import java.security.KeyStore;
- import java.security.PrivateKey;
- import java.security.cert.Certificate;
- import java.util.Enumeration;
-
-
- /**
- *
- * PKCS12证书中解析公钥、私钥、证书序列号
- *
- * apiclient_cert.p12
- *
- */
- public class P12Utils {
-
-
- @Test
- public void test(){
- // p12证书路径
- String path = "D:\\Java\\work\\ChenXinCode\\light_show\\ruoyi-admin\\src\\main\\resources\\apiclient_cert.p12";
- P12InfoVo vo = this.parse(path, WxPayUtils.mchId);
-
- System.out.println("证书公钥: " + vo.getPublicKey());
- System.out.println("证书私钥: " + vo.getPrivateKey());
- System.out.println("证书序列号: " + vo.getSerialNo());
- }
-
- /**
- * 解析p12文件
- *
- * @param p12Path 证书文件路径
- * @param passwd 证书密码 (也就是商户号)
- * @return
- */
- public static P12InfoVo parse(String p12Path, String passwd) {
- try {
- // 获取文件流
- FileInputStream is = new FileInputStream(p12Path);
-
- KeyStore ks = KeyStore.getInstance("PKCS12");
- ks.load(is, passwd.toCharArray());
- String keyAlias = null;
- //解析证书,必须有别名
- Enumeration<String> aliases = ks.aliases();
- if (aliases.hasMoreElements()) {
- keyAlias = aliases.nextElement();
- }
- //解析私钥
- PrivateKey privateKey = (PrivateKey) ks.getKey(keyAlias, passwd.toCharArray());
- Certificate cert = ks.getCertificate(keyAlias);
- BigInteger serialNumber = ((X509CertImpl) cert).getSerialNumber();
- //证书一般都使用16进制表示
- String certSn = serialNumber.toString(16).toUpperCase();
-
- //设置证书公钥、私钥、序列号
- return P12InfoVo.builder()
- .publicKey(cert.getPublicKey())
- .privateKey(privateKey)
- .serialNo(certSn)
- .build();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。