当前位置:   article > 正文

java 解析p12证书 (获取公钥、私钥、序列号)_java 解析p12文件

java 解析p12文件

          

1. p12文件放在resources目录下

 
2. P12InfoVo

  1. import lombok.Builder;
  2. import lombok.Data;
  3. import java.io.Serializable;
  4. import java.security.PrivateKey;
  5. import java.security.PublicKey;
  6. /**
  7. * p12证书VO
  8. */
  9. @Data
  10. @Builder
  11. public class P12InfoVo implements Serializable{
  12. /**
  13. * 证书公钥
  14. */
  15. private final PublicKey publicKey;
  16. /**
  17. * 证书私钥
  18. */
  19. private final PrivateKey privateKey;
  20. /**
  21. * 证书序列号
  22. */
  23. private final String serialNo;
  24. }

3. P12Utils

  1. import com.ruoyi.ruoyils.utils.WxPayUtils;
  2. import org.junit.Test;
  3. import sun.security.x509.X509CertImpl;
  4. import java.io.FileInputStream;
  5. import java.math.BigInteger;
  6. import java.security.KeyStore;
  7. import java.security.PrivateKey;
  8. import java.security.cert.Certificate;
  9. import java.util.Enumeration;
  10. /**
  11. *
  12. * PKCS12证书中解析公钥、私钥、证书序列号
  13. *
  14. * apiclient_cert.p12
  15. *
  16. */
  17. public class P12Utils {
  18. @Test
  19. public void test(){
  20. // p12证书路径
  21. String path = "D:\\Java\\work\\ChenXinCode\\light_show\\ruoyi-admin\\src\\main\\resources\\apiclient_cert.p12";
  22. P12InfoVo vo = this.parse(path, WxPayUtils.mchId);
  23. System.out.println("证书公钥: " + vo.getPublicKey());
  24. System.out.println("证书私钥: " + vo.getPrivateKey());
  25. System.out.println("证书序列号: " + vo.getSerialNo());
  26. }
  27. /**
  28. * 解析p12文件
  29. *
  30. * @param p12Path 证书文件路径
  31. * @param passwd 证书密码 (也就是商户号)
  32. * @return
  33. */
  34. public static P12InfoVo parse(String p12Path, String passwd) {
  35. try {
  36. // 获取文件流
  37. FileInputStream is = new FileInputStream(p12Path);
  38. KeyStore ks = KeyStore.getInstance("PKCS12");
  39. ks.load(is, passwd.toCharArray());
  40. String keyAlias = null;
  41. //解析证书,必须有别名
  42. Enumeration<String> aliases = ks.aliases();
  43. if (aliases.hasMoreElements()) {
  44. keyAlias = aliases.nextElement();
  45. }
  46. //解析私钥
  47. PrivateKey privateKey = (PrivateKey) ks.getKey(keyAlias, passwd.toCharArray());
  48. Certificate cert = ks.getCertificate(keyAlias);
  49. BigInteger serialNumber = ((X509CertImpl) cert).getSerialNumber();
  50. //证书一般都使用16进制表示
  51. String certSn = serialNumber.toString(16).toUpperCase();
  52. //设置证书公钥、私钥、序列号
  53. return P12InfoVo.builder()
  54. .publicKey(cert.getPublicKey())
  55. .privateKey(privateKey)
  56. .serialNo(certSn)
  57. .build();
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. return null;
  62. }
  63. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/314075
推荐阅读
相关标签
  

闽ICP备14008679号